简体   繁体   English

如何使用LINQ获取有序列表的详细信息

[英]How to get an ordered list detail using LINQ

I have questionnaire class with its detail, question, and question group. 我有一个调查表类,其中包含详细信息,问题和问题组。 The structure is like this: 结构是这样的:

在此处输入图片说明

I create the details view to display a Questionnaire and the details. 我创建了详细信息视图以显示Questionnaire和详细信息。 The details should be displayed based on Sequence in QuestionGroup . 详细信息应基于QuestionGroup Sequence显示。 Using LINQ, how to get a questionnaire with its details ordered by sequence in question group. 使用LINQ,如何获得按问题组中的顺序排序的详细调查表。

So far, when I create a LINQ syntax to get solve this: 到目前为止,当我创建LINQ语法来解决此问题时:

var questionnaire = db.Questionnaires
   .Include(q => q.QuestionnaireDetails)
   .FirstOrDefault(q => q.QuestionnaireID == questionnaireID);

I've got 2 problems: 我有2个问题:

1) I cannot call Include for Question and QuestionGroup (eager loading) 1)我不能致电QuestionQuestionGroup Include (急切加载)
.Include(q => q.QuestionnaireDetails.Question) <-- error .Include(q => q.QuestionnaireDetails.Question) <-错误

Error: 错误:
Cannot convert lambda expression to type 'string' because it is not a delegate type

2) I cannot call OrderBy by Sequence , before call .FirstOrDefault() I added 2)我不能按Sequence调用OrderBy ,然后再调用.FirstOrDefault()
.OrderBy(q => q.QuestionnaireDetails.Question.QuestionGroup.Sequence) <-- error .OrderBy(q => q.QuestionnaireDetails.Question.QuestionGroup.Sequence) <-错误

Error: 错误:
'System.Collections.Generic.ICollection<MvcApplication1.Models.QuestionnaireDetail>' does not contain a definition for 'Question' and no extension method 'Question' accepting a first argument of type 'System.Collections.Generic.ICollection<MvcApplication1.Models.QuestionnaireDetail>' could be found (are you missing a using directive or an assembly reference?)

UPDATE UPDATE

I tried solution from @JesseJames, with a little modification: 我尝试了@JesseJames的解决方案,并做了一些修改:

var questionnaire = from qg in db.QuestionGroups
                    join q in db.Questions on qg.QuestionGroupID equals q.QuestionGroupID
                    join qd in db.QuestionnaireDetails on q.QuestionID equals qd.QuestionID
                    join qe in db.Questionnaires on qd.QuestionnaireID equals qe.QuestionnaireID
                    orderby qg.Sequence
                    select new Questionnaire { 
                        QuestionnaireID = qe.QuestionnaireID, 
                        Date = qe.Date,
                        Respondent = qe.Respondent,
                        QuestionnaireDetails = qe.QuestionnaireDetails };

but I've got error: 但我有错误:

The entity or complex type 'MvcApplication1Model.Questionnaire' cannot be constructed in a LINQ to Entities query.

var query = from qg in db.QuestionGroup
            from q in db.Questions.Where(r=>r.QuestionGroupId == qg.QuestionGroupId)
            from qd in db.QuestionnaireDetail.WHere(r=>r.QuestionId== q.QuestionId)
            from qe in db.Questionnaire.Where(r=>r.QuestinnareId == qd.QuestinnareId)
            orderby qg.Sequence
            select new { Questionnaire = q, QuestionnaireDetail = qd };

EDIT 编辑

You may prefer this syntax 您可能更喜欢这种语法

var query = from qg in db.QuestionGroup
            join q in db.Questions on qg.QuestionGroupId equals q.QuestionGroupId
            join qd in db.QuestionnaireDetail on q.QuestionId equals qg.QuestionId
            join qe in db.Questionnaire on qd.QuestinnareId equals qe.QuestinnareId
            orderby qg.Sequence
            select new { Questionnaire = q, QuestionnaireDetail = qd };

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

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