如何在Blazor答题程序中提取列表前5题及按类别筛选题目?
解决方案
首先确保你的统一Questions列表是包含所有类别题目的List<Question>集合,先定义基础的Question模型(如果还没定义):
public class Question { public int Id { get; set; } public string Content { get; set; } public string Category { get; set; } // 对应"高尔夫""影视"等分类 // 可添加选项、答案等业务所需属性 }
接下来用LINQ就能快速实现你的两个需求:
1. 获取列表前5个问题
直接用Take()方法,它会自动处理列表不足5条的情况(返回全部现有问题):
private List<Question> _allQuestions = new List<Question>(); // 获取前5个问题 public List<Question> GetTop5Questions() { return _allQuestions.Take(5).ToList(); }
2. 按指定类别提取题目
用Where()过滤匹配类别的条目,建议忽略大小写避免因输入大小写不一致导致的匹配失败:
public List<Question> GetQuestionsByCategory(string category) { if (string.IsNullOrEmpty(category)) return new List<Question>(); return _allQuestions .Where(q => q.Category.Equals(category, StringComparison.OrdinalIgnoreCase)) .ToList(); }
在Blazor组件中替代原有分类调用
原来按分类列表调用的逻辑,现在直接调用上面的方法即可,示例如下:
@* 渲染前5个推荐题目 *@ <h3>推荐题目</h3> @foreach (var question in GetTop5Questions()) { <div class="question-card"> <p>@question.Content</p> <small>分类:@question.Category</small> </div> } @* 渲染指定类别的题目,比如"影视"分类 *@ <h3>影视专区</h3> @foreach (var question in GetQuestionsByCategory("影视")) { <div class="question-card"> <p>@question.Content</p> </div> }
如果题目数据从后端加载,建议把这些逻辑封装到服务类(比如QuestionService)中,通过依赖注入使用,更符合Blazor最佳实践:
public class QuestionService { private List<Question> _allQuestions; public QuestionService() { // 这里替换为从API、数据库或本地文件加载所有题目的逻辑 _allQuestions = LoadAllQuestions(); } private List<Question> LoadAllQuestions() { // 模拟测试数据 return new List<Question> { new Question { Id = 1, Content = "高尔夫比赛中标准杆通常为多少?", Category = "高尔夫" }, new Question { Id = 2, Content = "《肖申克的救赎》改编自哪位作家的小说?", Category = "影视" }, // 更多测试题目... }; } // 把GetTop5Questions和GetQuestionsByCategory方法移到这里 }
在Program.cs注册服务:
builder.Services.AddScoped<QuestionService>();
组件中注入使用:
@inject QuestionService QuestionService <h3>高尔夫专区</h3> @foreach (var question in QuestionService.GetQuestionsByCategory("高尔夫")) { <div>@question.Content</div> }
这样就能完全替代原来按分类维护多个列表的方式,统一用一个集合处理所有需求。
内容的提问来源于stack exchange,提问作者carlsby
相关产品推荐
相关产品推荐

