You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:35:18