如何在asp.net mvc视图中将基于属性的对象分组到一个表中
本文关键字:对象 一个 属性 视图 mvc net 于属性 asp | 更新日期: 2023-09-27 18:28:54
我是ASP.NET MVC的新手,我有一个传递给视图的对象列表,我需要根据它们的两个属性将其分组到一个表中。例如,每个对象都具有以下属性:
public class Student
{
public int id;
public string name;
public int gpa;
public string school;
...
}
在我看来,我想要一个表,其中的列是gpa的不同范围,每一行都是一个学校。在表中的每个单元格中,我想显示属于特定gpa范围的特定学校的所有学生的姓名。示例:
模型中的学生列表:
Student{id=1, name="Alice", gpa=3.5, school="School A"};
Student{id=2, name="Bob", gpa=2.5, school="School A"};
Student{id=3, name="Charlie", gpa=1.5, school="School A"};
Student{id=4, name="David", gpa=2.5, school="School B"};
Student{id=5, name="Ellen", gpa=1.0, school="School B"};
Student{id=6, name="Frank", gpa=2.5, school="School C"};
Student{id=7, name="Garry", gpa=3.5, school="School C"};
生成的表在视图中应该是这样的:
[0.0, 2.0) [2.0, 4.0]
----------------------------------------------------------
School A Charlie Alice
Bob
----------------------------------------------------------
School B Ellen David
----------------------------------------------------------
School C Frank
Garry
----------------------------------------------------------
当将未排序对象的列表传递到视图中时,有没有一种简单的方法可以实现这一点?这似乎是一个经常出现的问题,但我找不到任何现有的解决方案。有人能帮我吗?提前谢谢。
您想要执行GROUP BY
,并且可以使用LINQ查询来执行。
var result =
from student in studentList
group student by new {student.school, student.gpa} into newGroup
select newGroup;
根据您的评论进行编辑:
如何获得特定值,例如{"学校A",2.0}?
您可以更改查询
List<Student> students = new List<Student>()
{
new Student{id=1, name="Alice", gpa=3.5, school="School A"},
new Student{id=2, name="Bob", gpa=2.5, school="School A"},
new Student{id=3, name="Charlie", gpa=1.5, school="School A"},
new Student{id=4, name="David", gpa=2.5, school="School B"},
new Student{id=5, name="Ellen", gpa=1.0, school="School B"},
new Student{id=6, name="Frank", gpa=2.5, school="School C"},
new Student{id=7, name="Garry", gpa=3.5, school="School C"},
};
var result = from student in students
group student by new { student.school, student.gpa } into newGroup
select new
{ Gpa = newGroup.Key.gpa,
School = newGroup.Key.school,
StudentName = newGroup.Select(x => x.name)
};
您现在可以使用类似的WHERE
条件
result.Where(a => a.School == "School A" && a.Gpa == 2.5)
如何使用此处的"结果"填充视图中的表?
如果你想将其作为模型传递给你的视图,那么最好创建一个视图模型并将其传递给视图,然后创建一个类似的强类型视图
您的视图模型
public class StudentView
{
public IEnumerable<string> StudentName { get; set; }
public double Gpa { get; set; }
public string School { get; set; }
}
将查询更改为
IEnumerable<StudentView> result = from student in students
group student by new { student.school, student.gpa } into newGroup
select new StudentView
{ Gpa = newGroup.Key.gpa,
School = newGroup.Key.school,
StudentName = newGroup.Select(x => x.name)
};
现在把它传给你的视图,说
return View(result);