C# 如何使用linq进行嵌套分组?

C# 如何使用linq进行嵌套分组?,c#,asp.net,sql,linq,group-by,C#,Asp.net,Sql,Linq,Group By,我正在尝试按以下顺序对结果进行分组 我想要属于学校团队的参赛作品。 我的输入模型通过FK链接到用户。 我的进入模型通过FK链接到团队。 团队通过m2m与用户链接。 用户通过FK链接到学校 我当前的查询如下所示: var y = (from en in _db.Entries where en.User.School_Id == schoolId group en by en

我正在尝试按以下顺序对结果进行分组

我想要属于学校团队的参赛作品。 我的输入模型通过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>

更新:

尝试此代码,它将返回每个团队的条目集合:

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);
});

我希望有帮助

看不到整个模型有点难。你能发布构建整个查询所需的所有模型类吗?@VladimirSachek我更新了这个问题,添加了一个类图。是否足够清楚?您是否尝试过使用联接来查询所有3个实体?@Bayeni我不确定我是否理解您的意思?我希望每个队都有一组参赛作品。每个学校都有一组参赛队。好的,我明白了,我会回复你一个答案。最好是每个队都有参赛作品。但我需要一个更高的层次,每个学校都有团队。一所学校>多个团队>每个团队>多个条目。我已经更新了我的答案,请检查第二部分,并让我知道是否有问题。@mongoose_za pastebin.com被阻止,我无法在工作时打开它。@Bayerni这里是另一个链接。看来我的垃圾桶被移走了。