带有 Linq 的中继器 - 一个项包含多个子项
本文关键字:一个 包含多 Linq 中继器 带有 | 更新日期: 2023-09-27 18:34:00
这是一个具有挑战性的问题。
我在数据库中有 2 个表:
类:ID、类名等
学生:ID、类 ID、名称等
我想要一个包含以下内容的中继器:
类 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") %>'>
</>
这有点取决于您的数据模型,但如果您有正确的 FK 结构,则无需手动连接到新的 {}。您只需在数据上下文上强制加载 Foreach 即可,并在您的类上执行 Foreach
此处的代码示例:http://www.antiyes.com/nested-repeater
这样的事情应该有效(基本上在加入之前对学生进行分组):
Student.GroupBy(s => s.ClassID)
.Join(Class,
g => g.Key,
c => c.ID,
(g, c) => new { Class = c, Students = g.ToArray() })
.ToList();
结果是一个匿名类型的列表,其中 Class
= 给定班级,Students
= 参加该班级的学生数组。