[英]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)我不能致电
Question
和QuestionGroup
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.