2013-06-20 2 views
1

나는 겉으로보기에는 단순한 작업을하고 있으며, 내가 인정하는 것보다 훨씬 어려움을 겪고 있습니다. 관련 하위 항목과 함께 상위 항목별로 그룹화 된 결과를 쿼리하고 표시하는 데 필요한 계층 적 테이블이 있습니다.ParentId에 의한 LINQ 그룹화

나의 현재 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); 

: 내가 생산 싶은

enter image description here

입니다 :

enter image description here

내 질문 간단히 말해서, 어떻게 c 나는 람다 구문을 사용하여 원하는 결과를 얻는다.

+0

유일한 차이점은 주문입니까? –

+0

'OrderBy (q => q.ParentQueryId) .ThenBy (q => q.QuestionId)'원하는 것을 얻으시겠습니까? –

+0

Servy에 이미지를 추가해 주셔서 감사합니다. 아직 충분한 담당자가 없습니다. :) –

답변

2

업데이트는 Servys의 의견을 기반으로합니다.

첫 줄은 모든 관련 질문이 함께 그룹화되어 있는지 확인하는 것입니다. 두 번째 줄은 부모 질문이 제일 먼저하는 것입니다. 세 번째 라인은 제대로

.OrderBy(q => q.ParentQuestionId == null ? q.QuestionId : q.ParentQuestionId) 
.ThenBy(q => q.ParentQuestionId == null ? 0 : 1) 
.ThenBy(q => q.DisplayOrder); 
+1

OP의 특정 데이터에는이 방법이 적용될 수 있지만 보지 못할 수도있는 가정에 의존하므로 근본 문제를 해결하지 못합니다. 그는 본질적으로 각 어린이가 부모 또는 형제 자매를 따르는 나무를 만들기 위해 노력하고 있습니다. – Servy

+0

환상적! 그 트릭을 않습니다. 감사! –

+0

@Servy - 정확합니다. 빠른 수정을 제공하지만 나무 구조가 여러 단계로 성장하면 중단 될 수 있습니다. 나는 지금 당장 빠른 수정으로 괜찮아. 나는 모든 도움에 감사한다! –

-1
.OrderBy(x => (x.ParentQuestionId==null?x.QuestionId:x.ParentQuestionId.Value)); 
+0

원하는 결과가 나타나지 않습니다. Notice 265. – Servy

+0

예. 당신과 스테이크가 제안했지만 도움이되지 않습니다. 감사. –

+0

null로 수정하기 위해 편집 됨 –

1

를 주문하는 것입니다 그래서으로 다음 상단 수준에서, 당신이 부모를 가지지 않는 모든 질문이, 트리 기반 구조 당신이 정말 여기 만들려고하는 것, 그리고 그 "부모"로 모든 질문을 "자식"노드.

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); 
+0

빠른 답변을 수락하고 있지만 귀하의 미래는 확실합니다. 신속한 도움에 감사드립니다! –