Я пытаюсь создать механизм опроса на основе существующего дизайна базы данных, подобного этому.
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()
Заранее спасибо за помощь.