C# 具有Linq的中继器-一个项目具有多个子项目
这是一个具有挑战性的问题 我在数据库中有两个表: 类别: Id、类名等 学生: ID、ClassID、名称等 我想要一个包含以下内容的中继器: 第1类名称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();
- 学生1
- 学生2
- 学生1
- 学生2
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();