C# 具有Linq的中继器-一个项目具有多个子项目

C# 具有Linq的中继器-一个项目具有多个子项目,c#,asp.net,linq,repeater,asprepeater,C#,Asp.net,Linq,Repeater,Asprepeater,这是一个具有挑战性的问题 我在数据库中有两个表: 类别: Id、类名等 学生: ID、ClassID、名称等 我想要一个包含以下内容的中继器: 第1类名称 学生1 学生2 第2类名称 学生1 学生2 现在是我的困境 如果我按照这些思路选择并加入Linq,我会为每个学生获得一个新的重复项目: var query = (From c in Class join s in Student on c.ID equals S.ClassID select new {C,A}).Tolist();

这是一个具有挑战性的问题

我在数据库中有两个表:

类别: Id、类名等

学生: ID、ClassID、名称等

我想要一个包含以下内容的中继器:

第1类名称

  • 学生1
  • 学生2
第2类名称

  • 学生1
  • 学生2
现在是我的困境

如果我按照这些思路选择并加入Linq,我会为每个学生获得一个新的重复项目:

var query = (From c in Class
join s in Student on c.ID equals S.ClassID
select new {C,A}).Tolist();
然而,我想要的是每个班级都有一个项目,每个班级都有学生项目

不太确定我是否在这里解释了我自己。。。提出问题,我会回答


多谢各位

您可以使用嵌套中继器,并让子中继器使用父类的学生

<asp:Repater ....>
 <asp:Repeater runat="server" DataSource='<%# Eval("Students") %>'>
 </>

类似的方法应该有效(基本上是在加入之前将学生分组):


结果是一个匿名类型列表,其中
=给定的类和
学生
=参加该类的学生数组。

除此之外,您的设计似乎只能容纳每个学生一个类,这可能不够。如果结构良好,则可能不够。嵌套的中继器可以工作,我必须在每次迭代中绑定它们。这可能会奏效。我会试试的,我会告诉你的。非常感谢。我以班级和学生为例,使解释更简单。它符合我使用的型号。谢谢你指出这一点,如果我必须使用Groupby,我仍然必须动态创建学生,对吗?或者我遗漏了什么?如果我必须使用Groupby,我仍然必须动态创建学生,对吗?还是我遗漏了什么?我不确定我是否理解你所说的“动态创造学生”的意思。答案基于这样的假设:班级和学生数据已经可用;如果不是的话,我无法理解你的问题。是的,数据已经可用。我的意思是。通过一个小组,你将得到班级和他们的学生。但是如何获得上面解释的UI结构呢。我只能考虑使用嵌套转发器来实现它。@user1203996嵌套转发器是UI端的最佳选择。但是,您的问题有点不清楚,所以我认为您要求的是收集数据的正确方法,而不是如何显示数据。请注意,如果没有任何分组,您将获得大量冗余(多个实例将持有相同的
)。
Student.GroupBy(s => s.ClassID)
       .Join(Class,
             g => g.Key,
             c => c.ID,
             (g, c) => new { Class = c, Students = g.ToArray() })
       .ToList();