带Linq的中继器 - 带有许多子项的一个项目

时间:2014-12-11 11:23:42

标签: c# asp.net linq repeater asprepeater

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

我在DB中有两个表:

类别: ID,类名等。

学生: ID,ClassID,名称等。

我想要一个包含以下内容的Repeater:

第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();

然而,我想要的是每个CLASS的项目,每个班级中的儿童项目作为学生。

不太确定如果我在这里解释自己......提出问题,我会回答。

非常感谢你。

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套转发器并让子转发器使用父类的学生。

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

这取决于您的数据模型,但如果您拥有正确的FK结构,则无需手动加入新的{}。你只需要在datacontext上强行加载,然后在你的班级上做一个Foreach

此处找到的代码示例: http://www.antiyes.com/nested-repeater

答案 1 :(得分:0)

这样的事情应该有效(基本上是在加入之前对学生进行分组):

Student.GroupBy(s => s.ClassID)
       .Join(Class,
             g => g.Key,
             c => c.ID,
             (g, c) => new { Class = c, Students = g.ToArray() })
       .ToList();

结果是一个匿名类型列表,Class = 给定类Students = 参加该类的学生数组。< / p>