2011-07-27 2 views
0

私はこのような既存のデータベース設計から調査エンジンを構築しようとしています。エンティティごとにLinqグループを作成し、グループ化された(ヌル入力可能な)エンティティによって注文する

Survey - Not so Relavent 
======================== 
SurveyID 
SurveyName 

SurveyQuestionCategories 
========================= 
SurveyQuestionCategoryID 
SurveyQuestionCategory 
SurveyID 
RecordOrder 

SurveyQuestions 
================ 
SurveyQuestionID 
SurveyQuestion 
SurveyID 
SurveyQuestionCategoryID 
RecordOrder 

調査の質問リストは基本的には常にありますが、調査には質問カテゴリがある場合とない場合があります。私がしたいのは、カテゴリー別にグループ化された調査のすべての質問(存在する場合)を引き出し、カテゴリレコードの順序(存在する場合)と質問レコードの順序で並べ替える1つのlinqクエリです。私はこれまでこれのようなものを持っています。グループ分けは、NULL SurveyQuestionCategoryによってグループ分けを扱うように、これは正常に動作

 Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions 
         Order By sq.RecordOrder 
         Group sq By Key = sq.SurveyQuestionCategory Into Group 
         Select QuestionCategory = Key, Questions = Group 

(ジャスト変数CurrentSurveyは、現在表示されているアンケートを表すエンティティを保持していることを前提とし)。問題は今私がこれにクエリを変更するときです。 Key.RecordOrderことで

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 

ライン注文は、null参照の例外をスローし、私は理由を理解することができます。誰かがこの1つのクエリを変更するだけでこれを解決する方法をアドバイスできますか?私は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() 

ありがとうございました。

答えて

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 

は、私は何のカテゴリが存在しない場合には-1を置くことによって、RecordOrderが整数であると仮定、そのような質問は、最初に表示されます。 LinqToSqlクエリの場合は、If条件が機能しない可能性があります。

+0

ありがとう、これは完璧に機能しました! –

関連する問題