我想從現有的數據庫設計構建一個這樣的調查引擎。由一個實體Linq組,然後由分組(可空)實體排序
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
線順序按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()
感謝您的幫助提前。
謝謝,這工作完美! –