【发布时间】:2011-10-14 04:15:02
【问题描述】:
我正在尝试从类似这样的现有数据库设计构建调查引擎。
Survey - Not so Relavent
========================
SurveyID
SurveyName
SurveyQuestionCategories
=========================
SurveyQuestionCategoryID
SurveyQuestionCategory
SurveyID
RecordOrder
SurveyQuestions
================
SurveyQuestionID
SurveyQuestion
SurveyID
SurveyQuestionCategoryID
RecordOrder
基本上,调查总会有一个问题列表,但调查可能有也可能没有问题类别。我想要做的是有一个 linq 查询,它将提取按类别分组的调查的所有问题(如果它们存在),并首先按类别记录顺序(如果它们存在)对它们进行排序,然后是问题记录顺序。到目前为止,我已经得到了类似的东西。 (假设变量 CurrentSurvey 持有代表当前显示调查的实体)
Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
Order By sq.RecordOrder
Group sq By Key = sq.SurveyQuestionCategory Into Group
Select QuestionCategory = Key, Questions = Group
这很好用,因为分组处理按 NULL SurveyQuestionCategory 分组。现在的问题是当我将查询更改为此时。
Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
Order By sq.RecordOrder
Group sq By Key = sq.SurveyQuestionCategory Into Group
Order By Key.RecordOrder
Select QuestionCategory = Key, Questions = Group
Order By Key.RecordOrder 行抛出空引用异常,我可以理解原因。有人可以通过修改这个查询来建议如何解决这个问题吗?我对 LINQ 相当陌生,在 VB .Net 中编写这个项目的必要性没有帮助。 :-)
您知道,我愿意采取另一种方法来解决这个问题。我也已经尝试过左外连接,但我对这种方法的排序感到困惑。这是我的备用查询。
Dim AllSurveyQuestions = (From sq In CurrentSurvey.SurveyQuestions Group Join qc In CurrentSurvey.SurveyQuestionCategories
On sq.SurveysNEW Equals qc.SurveysNEW Into sqc = Group
From qc In sqc.DefaultIfEmpty()
Select sq Order By sq.RecordOrder).Distinct()
提前感谢您的帮助。
【问题讨论】:
标签: asp.net vb.net linq entity-framework-4