我有一个看似简单的任务,其实我遇到的麻烦比我愿意承认的要多得多。我有一个分层表,我需要查询和显示按父级和关联子级分组的结果。
我当前的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语法获得所需的结果。
发布于 2013-06-21 01:38:38
根据Servys的评论进行更新。
第一行是确保所有相关的问题被分组在一起。第二行是确保家长问题是第一位的。第三行是正确订购
.OrderBy(q => q.ParentQuestionId == null ? q.QuestionId : q.ParentQuestionId)
.ThenBy(q => q.ParentQuestionId == null ? 0 : 1)
.ThenBy(q => q.DisplayOrder);发布于 2013-06-21 01:44:04
所以看起来你真正想要在这里创建的是一个基于树的结构,在这个结构中,在顶层,你有所有没有父节点的问题,然后作为“子”节点的所有问题都有一个父节点。
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-21 01:34:18
.OrderBy(x => (x.ParentQuestionId==null?x.QuestionId:x.ParentQuestionId.Value));https://stackoverflow.com/questions/17220032
复制相似问题