带有 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();

但是,我想要的是每个班级都有一个项目,每个班级都有孩子项目作为学生。

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

非常感谢。

带有 Linq 的中继器 - 一个项包含多个子项

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

<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 = 参加该班级的学生数组

相关文章: