C# 如何使用linq进行嵌套分组?
我正在尝试按以下顺序对结果进行分组 我想要属于学校团队的参赛作品。 我的输入模型通过FK链接到用户。 我的进入模型通过FK链接到团队。 团队通过m2m与用户链接。 用户通过FK链接到学校 我当前的查询如下所示: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
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这里是另一个链接。看来我的垃圾桶被移走了。