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

在MVC C#中如何合并两个查询结果得到单个List集合

解决方案
  • 推荐采用ViewModel视图模型的方式实现合并,这是ASP.NET MVC开发中传递组合数据的标准规范,类型安全且便于视图绑定。

步骤1:创建视图模型类

// 可放在项目Models文件夹下的ViewModel目录中
public class QuestionWithAnswerCountVM
{
    public Question QuestionInfo { get; set; }
    public int AnswerCount { get; set; }
    // 也可根据视图需要直接展开Question的字段,比如public int QuestionId {get;set;} 等
}

步骤2:优化控制器查询逻辑(推荐)

直接单次关联查询得到合并后的列表,避免两次查询存在的顺序匹配风险,性能更优:

public IActionResult Open(int? id)
{
    // 先校验参数合法性
    if (!id.HasValue)
    {
        return BadRequest();
    }
    
    var combinedList = (from q in _context.Questions 
                        where q.CategoryId == id.Value
                        join a in _context.Answers
                        on q.ID equals a.QId into answerGroup
                        select new QuestionWithAnswerCountVM
                        {
                            QuestionInfo = q,
                            AnswerCount = answerGroup.Count()
                        }).ToList();

    if (!combinedList.Any())
    {
        return NotFound();
    }
    
    return View(combinedList);
}
  • 如果你需要直接合并现有已经查询得到的两个列表,由于两个列表顺序是一一对应的(answers列表是按照questions列表的ID分组得到),可以用索引匹配实现合并:
var combinedList = new List<QuestionWithAnswerCountVM>();
for (int i = 0; i < questions.Count; i++)
{
    combinedList.Add(new QuestionWithAnswerCountVM
    {
        QuestionInfo = questions[i],
        AnswerCount = answers[i]
    });
}

注意:原有代码中questions == null的判断无效,ToList()方法永远不会返回null,最多返回空集合,建议替换为判断!questions.Any()。

内容的提问来源于stack exchange,提问作者Nurlybek Bekmukhanbet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:03