我有一份我正在展示的学校名单。在每个学校的下拉列表中,我只想显示学生表中的学生,其表格中fk等于pk。离开表有fk school_schoolId。有很多学校。例如在学生表中 - studentId = 1,depart_departId = 4,school_schoolId = 4。 在学校表 - schoolId = 4 因此,学生1将列在学校4下。
@foreach (var item in Model.School)
{
@:<tr style="background-color:grey;-moz-border-radius: 15px;border-radius: 15px;">
<td class="accordion" style="width: 50%;padding-left: 10px;text-align: left;">
<a href="#">@item.Name</a>
<div style="font-size:10px;">
@foreach (var student in Model.students)
{
<div style="background-color:grey;width:100%;padding-top:10px; margin-bottom:10px">
<span style="margin-left:8%; text-align: center">@student.Name</span>
</div>
}
</div>
</td>
@:</tr>
}
答案 0 :(得分:3)
您可以使用.Where
:
@foreach (var student in Model.students.Where(s => s.SchoolId == item.SchoolId))
{
}
你可以在你的模型中过滤掉这个,而不是在视图中做逻辑。也许像AvailableStudentsModel
这样的东西。您还可以在Students
上编写一个扩展方法,以确定它们是否在该学校中更有效并使您的代码更具可读性。然后,您可以使用它来填充我提到的AvailableStudentsModel
。
答案 1 :(得分:1)
根据代码,似乎Model
没有正确表示数据。
在第一个循环中,您将遍历所有学校。这很好。
(我会将变量的名称更改为school
以更好地表示其角色 - 仅为了清晰起见。我还会将School
属性的名称更改为复数{{ 1}}表示它有一堆它们。)
Schools
但是在第二个循环中,它嵌套在第一个循环中,你循环遍历所有学生,而不仅仅是当前学校的学生。
更好的方法是在@foreach (var school in Model.Schools)
模型类中添加Students
属性,然后循环遍历当前学校的学生:
School
当您在@foreach (var student in school.Students)
(或您构建它的任何地方)中构建模型时,请确保将每个学校的学生添加到正确的Controller
集合中。如果您正确配置,实体框架可以为您构建这样的层次结构。