2

私は一見単純なタスクを抱えていますが、それをやっていると認めるよりもはるかに多くの問題を抱えています。関連する子を持つ親によってグループ化された結果を照会して表示する必要がある階層テーブルがあります。

私の現在のLINQクエリ:

var quests = Questions.Include(q => q.Question2)
      .Include(q => q.Sections)
      .Include(q => q.QuestionType)
      .Include(q => q.AnswerOptions)
      .Where(sq => sq.Sections.Any(s => s.SectionId == sectionId))
      .OrderBy(q=> q.QuestionId).ThenBy(q => q.ParentQuestionId);

これにより、次の結果セットが生成されます。

ここに画像の説明を入力

私が作りたいのは:

ここに画像の説明を入力

私の質問は、ラムダ構文を使用して目的の結果を得るにはどうすればよいかということです。

4

3 に答える 3

4

Servys のコメントに基づいて更新します。

最初の行は、関連するすべての質問がグループ化されていることを確認することです。2行目は、親の質問が最初であることを確認することです。3行目は適切に注文することです

 .OrderBy(q => q.ParentQuestionId == null ? q.QuestionId : q.ParentQuestionId)
 .ThenBy(q => q.ParentQuestionId == null ? 0 : 1)
 .ThenBy(q => q.DisplayOrder);
于 2013-06-20T17:38:38.210 に答える
2

したがって、ここで実際に作成しようとしているのは、ツリーベースの構造であり、最上位には親のないすべての質問があり、「子」ノードとして、それを親として持つすべての質問があります。

var questions = GetAllQuestions();//here is where you can put your includes, etc.

var query = questions.Where(q => q.ParentQuestionId != null)
    .GroupBy(q => q.ParentQuestionId)
    .Select(group => new
    {
        Parent = questions.First(q => q.QuestionId == group.Key),
        Children = group.OrderBy(q => q.DisplayOrder),
    })
    .OrderBy(group => group.Parent.DisplayOrder);
于 2013-06-20T17:44:03.917 に答える
-1
.OrderBy(x => (x.ParentQuestionId==null?x.QuestionId:x.ParentQuestionId.Value));
于 2013-06-20T17:34:17.817 に答える