2

私はLINQNewbであり、調査のページを返すこのクエリを持っています。(これらの値は、何らかの理由でテーブルに具体化されません。)

//Group all of this data by page 
var pages = from fq in db.FormQuestions
        where (fq.FormId == id) && fq.Disabled == false
        group fq by fq.PageNumber into p
        select new DTOs.PageDTO { PageNumber = p.Key.Value };

そして、このクエリがあります。これは、すべてのリーフデータをDTOに投影します。

var questions = from fq in db.FormQuestions
   join q in db.Questions on fq.QuestionId equals q.QuestionId
   where (fq.FormId == id) && fq.Disabled == false
   //where (fq.FormId == id) && fq.Disabled == false && fq.PageNumber == page
   orderby fq.DisplayOrder
   select new DTOs.FormQuestionDTO()
   {
       DisplayOrder = (fq.DisplayOrder.HasValue ? fq.DisplayOrder.Value : 0),
       PageNumber = (fq.PageNumber.HasValue ? fq.PageNumber.Value : 0),
       QuestionId = q.QuestionId,
       QuestionSelectionMode = q.vts_tbQuestionSelectionMode.Description,
       QuestionText = q.QuestionText,
       Answers =
           from answer in q.Answers
           join at in db.AnswerTypes on answer.AnswerTypeId equals at.AnswerTypeID
           where answer.Disabled == false
           orderby answer.DisplayOrder
           select new DTOs.AnswerDTO()
           {
               AnswerId = answer.AnswerId,
               AnswerText = answer.AnswerText,
               DisplayOrder = answer.DisplayOrder,
               AnswerType = at.Description
           }
   };

これら2つをきちんと結合する方法はありますか?つまり、各ページのDTOの下に、QUestion DTOを表示し、次にそのAnswerDTOの内部を表示します。

また、これをすべて1つのLINQステートメントで実行できたとしても、LINQステートメントを個別に作成してからマージすることをお勧めしますか?これは、1つの巨大なクエリを作成できる可能性があるという点で、SQLで一時変数を作成するのと少し似ていますが、維持するのは面倒です。

4

1 に答える 1

1

では、なぜこのようなものが機能しないのでしょうか?

//Group all of this data by page 
var pages = from fq in db.FormQuestions
        where (fq.FormId == id) && fq.Disabled == false
        group fq by fq.PageNumber into p
        select new DTOs.PageDTO { 
          PageNumber = p.Key.Value 
          questions = from fq in db.FormQuestions
                     join q in db.Questions on fq.QuestionId equals q.QuestionId
                     where (fq.FormId == id) && fq.Disabled == false
                     orderby fq.DisplayOrder
                     select new DTOs.FormQuestionDTO()
                     {
                       DisplayOrder = (fq.DisplayOrder.HasValue ? fq.DisplayOrder.Value : 0),
                       // etc as you 2nd code sample
于 2012-12-29T23:25:59.687 に答える