2014-05-14 85 views
0

我想按以下顺序对结果进行分组。如何使用linq做嵌套组?

我想条目属于属于学校。 我的输入模式通过FK链接到用户。 我的输入模型通过FK链接到Team。 团队通过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列表以匹配。)

-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