繁体   English   中英

如何在 mvc c# 中组合两个查询并获得一个列表

[英]How to combine two queries and get one List in mvc c#

如何将这两个列表合并到一个列表中?

public IActionResult Open(int? id)
    {
        
        var questions = (from q in _context.Questions where q.CategoryId == id select q).ToList();

        var answers = (from s in _context.Answers
                       join b in questions
                       on s.QId equals b.ID
                       group s by b.ID into g
                       select g.Count()).ToList();
        
        if (questions == null)
        {
            return NotFound();
        }
        
        return View(questions);
    }

使用 ViewModel 存储两个列表并将其传递给 View

您面临的问题是一个常见问题。 正如@Arripe 在这里已经提到的,您可以创建一个复合 class 的 ViewModel,其中包含您要在表示层中使用的每个 class 的属性。 通过简单搜索“create viewmodel asp.net mvc”或类似内容,您可以找到创建 ViewModel 的指南。 你的可能被称为“QuestionAnswerViewModel”。

构建实际的 ViewModel 可能很笨重(循环遍历每个集合,随时映射属性),或者您可以使用它更有创意。

例如,您可以尝试将两个查询结果连接到一个组合结果列表中,结果是类型。

请参阅此处的@JonSkeet 示例: 如何使用 linq 或 lambda 表达式加入两个列表

我认为你想要得到的是你有很多答案的问题,对吧? 如果是这样的话,那么我认为这应该是最简单的解决方案。 当然,您需要更新视图以使用新的 object。

var questionsWithAnswerCount = _context.Questions.Where(q => q.CategoryId == id)
                                                 .GroupJoin(_context.Answers, // list you join with
                                                               q => q.ID, // "main" list key
                                                               a => a.QId, // joined list key
                                                               (q, a) => new { Question = q, AnswerCount = a.Count() } // what to do with result - create new object that has Questions & Number of answers
                                                            )
                                                 .ToList();

if (questionsWithAnswerCount.Any()) // No need to check for null since you're calling .ToList() which will return an empty list, even when no elements were found, instead call .Any() to check if the list is empty or not
{
    return View(questionsWithAnswerCount);
}

return NotFound();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM