2014-05-14 6 views
0

다음 순서로 결과를 그룹화하려고합니다.linq를 사용하여 중첩 그룹을 수행하는 방법은 무엇입니까?

나는 학교에 속하는 에 속하는 항목를 원한다. 내 항목 모델은 FK를 통해 사용자에게 연결됩니다. 내 항목 모델이 FK 팀으로 연결되었습니다. 팀이 m2m 단위로 사용자와 연결되었습니다. 사용자가 FK로 학교에 연결되었습니다.

나의 현재 쿼리는 다음과 같습니다

var y = 
        (from en in _db.Entries 
        where en.User.School_Id == schoolId 
        group en by en.Team_Id into te 
        select new 
        { 
         Team = te.Key, 
         Entries = te 
        }).ToList(); 

이 완벽하게 반환 팀과 팀 아래, 각각의 항목.

Teams 
| 
-Team A 
--| 
    Entries 
    | 
    -Entry 1 
    -Entry 2 

어떻게하면 학교 그룹 내에서 모두 중첩 할 수 있습니까? (나는 한 학교 ID를 지정하고있어 데모에 있지만 실제로에 맞게 학교 ID의 목록이 될 것입니다.)

-Schools 
| 
-School A 
-| 
-Teams 
-Team A 
    | 
    -Entries 
    |-Entry 1 
    |-Entry 2 

내가있는 gridview에 직접 결합하고 싶습니다. 이것은 잘 작동하지만 추가 그룹화를 통해 나는이 마크에 어떤 영향을 미치는지 조금 확실하지 않습니다.

   <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server"> 
        <Columns> 

         <asp:BoundField HeaderText="School" DataField="School" /> 
         <asp:BoundField HeaderText="Team" DataField="Team" /> 
         <asp:TemplateField HeaderText="Entries"> 
          <ItemTemplate> 
           <asp:BulletedList ID="BulletedList1" runat="server" 
            DataSource='<%#Eval("Entries")%>' DataValueField="Name" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

        </Columns> 
       </asp:GridView> 

UPDATE :Here is a diagram of the models

+0

전체 모델을 보지 않고 조금 힘들다. 전체 쿼리를 구성하는 데 필요한 모든 모델 클래스를 게시 할 수 있습니까? –

+0

@VladimirSachek 질문을 업데이트하여 클래스 다이어그램을 포함 시켰습니다. 충분히 명확한가요? – darren

+0

조인을 사용하여 3 개의 엔티티 모두를 쿼리 해 보았습니까? – Bayeni

답변

0

것은이 코드를 사용해보십시오,이 팀 당 항목의 컬렉션을 반환합니다이 각 학교에 갈 것

var ColEntries = _db.Teams.GroupJoin(_db.Entries,  
             t => t.Team_ID, 
             e => e.Team_ID,  
             (t, e) =>  
             new { 
               Team = t, 
         Entries = e.Select(en => en).ToList() 
              }).ToList(); 

을하고 팀을 얻을 및 해당 항목

_db.Schools.foreach(s=> 
{ 
    //Fine a collection say "col" 
    var y = _db.Entries.Where(e=> e.User.School_ID = s.School_ID).GroupBy(e=> e.Team_ID).ToList(); 

    col.Add(y); 
}); 

도움이 되었으면 좋겠다.

+0

팀 당 항목을 얻는 것이 좋습니다. 하지만 학교마다 팀이있는 곳에서는 더 높은 수준이 필요합니다. 한 학교> 많은 팀> 각 팀> 많은 항목. – darren

+0

답을 업데이트했습니다. 두 번째 부분을 확인하고 문제가 있으면 알려주십시오. – Bayeni

+0

@mongoose_za pastebin.com이 차단되었으므로 여기서 직장을 찾을 수 없습니다. – Bayeni

관련 문제