2

我有一个看似简单的任务,但我遇到的麻烦比我愿意承认的要多得多。我有一个分层表,我需要查询并显示由父级和关联子级分组的结果。

我当前的 LINQ 查询:

var quests = Questions.Include(q => q.Question2)
      .Include(q => q.Sections)
      .Include(q => q.QuestionType)
      .Include(q => q.AnswerOptions)
      .Where(sq => sq.Sections.Any(s => s.SectionId == sectionId))
      .OrderBy(q=> q.QuestionId).ThenBy(q => q.ParentQuestionId);

这会产生以下结果集:

在此处输入图像描述

我想要制作的是:

在此处输入图像描述

我的问题很简单,如何使用 Lambda 语法获得所需的结果。

4

3 回答 3

4

根据 Servys 的评论进行更新。

第一行是确保所有相关问题都归为一组。第二行是确保父母问题是第一位的。第三行是正确订购

 .OrderBy(q => q.ParentQuestionId == null ? q.QuestionId : q.ParentQuestionId)
 .ThenBy(q => q.ParentQuestionId == null ? 0 : 1)
 .ThenBy(q => q.DisplayOrder);
于 2013-06-20T17:38:38.210 回答
2

所以看起来你真正想要在这里创建的是一个基于树的结构,在这个结构中,在顶层,你有所有没有父级的问题,然后作为“子”节点,所有有父级的问题。

var questions = GetAllQuestions();//here is where you can put your includes, etc.

var query = questions.Where(q => q.ParentQuestionId != null)
    .GroupBy(q => q.ParentQuestionId)
    .Select(group => new
    {
        Parent = questions.First(q => q.QuestionId == group.Key),
        Children = group.OrderBy(q => q.DisplayOrder),
    })
    .OrderBy(group => group.Parent.DisplayOrder);
于 2013-06-20T17:44:03.917 回答
-1
.OrderBy(x => (x.ParentQuestionId==null?x.QuestionId:x.ParentQuestionId.Value));
于 2013-06-20T17:34:17.817 回答