首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ按ParentId分组

LINQ按ParentId分组
EN

Stack Overflow用户
提问于 2013-06-21 01:28:31
回答 3查看 1K关注 0票数 2

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

我当前的LINQ查询:

代码语言:javascript
复制
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语法获得所需的结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-21 01:38:38

根据Servys的评论进行更新。

第一行是确保所有相关的问题被分组在一起。第二行是确保家长问题是第一位的。第三行是正确订购

代码语言:javascript
复制
 .OrderBy(q => q.ParentQuestionId == null ? q.QuestionId : q.ParentQuestionId)
 .ThenBy(q => q.ParentQuestionId == null ? 0 : 1)
 .ThenBy(q => q.DisplayOrder);
票数 4
EN

Stack Overflow用户

发布于 2013-06-21 01:44:04

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

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2013-06-21 01:34:18

代码语言:javascript
复制
.OrderBy(x => (x.ParentQuestionId==null?x.QuestionId:x.ParentQuestionId.Value));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17220032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档