我正在尝试从现有的数据库设计构建一个调查引擎,就像这样。
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()
感谢您的帮助。
答案 0 :(得分:1)
这是一个想法,但未经过测试:
Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
Order By sq.RecordOrder
Group sq By Key = sq.SurveyQuestionCategory Into Group
Select QuestionCategory = Key, Questions = Group,
CategoryOrder = If(Key Is Nothing, -1, Key.RecordOrder)
Order By CategoryOrder
我假设RecordOrder是一个整数,如果没有类别则输入-1,这样的问题首先出现。现在,如果这是一个LinqToSql查询,可能If条件不起作用。