C# 如何在asp.net mvc视图中将基于属性的对象分组到表中
我对ASP.NET MVC非常陌生,我有一个对象列表,这些对象被传递到一个视图,我需要根据它们的两个属性将它们分组到一个表中。例如,每个对象都具有以下属性:C# 如何在asp.net mvc视图中将基于属性的对象分组到表中,c#,asp.net-mvc,C#,Asp.net Mvc,我对ASP.NET MVC非常陌生,我有一个对象列表,这些对象被传递到一个视图,我需要根据它们的两个属性将它们分组到一个表中。例如,每个对象都具有以下属性: public class Student { public int id; public string name; public int gpa; public string school; ... } 在我看来,我希望有一个表,其中的列是gpa的不同范围,每行是一所学校。在表中的每个单元格中,我想
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
----------------------------------------------------------
在将未排序对象的列表传递到视图中时,是否有一种简单的方法来实现这一点?这似乎是一个可能出现很多问题,但我找不到任何现有的解决方案。有人能帮我吗?提前感谢。您想要执行
分组方式,可以使用LINQ查询来执行
var result =
from student in studentList
group student by new {student.school, student.gpa} into newGroup
select newGroup;
根据您的评论进行编辑:
如何获取特定值,例如{“School 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)
};
如何使用此处的“结果”填充视图中的表
如果希望将此作为模型传递给视图,那么最好创建一个viewmodel,并将其传递给view,然后创建一个该类型的强类型视图,如
您的viewmodel
public class StudentView
{
public IEnumerable<string> StudentName { get; set; }
public double Gpa { get; set; }
public string School { get; set; }
}
您希望执行分组方式
,可以使用LINQ查询来执行
var result =
from student in studentList
group student by new {student.school, student.gpa} into newGroup
select newGroup;
根据您的评论进行编辑:
如何获取特定值,例如{“School 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)
};
如何使用此处的“结果”填充视图中的表
如果希望将此作为模型传递给视图,那么最好创建一个viewmodel,并将其传递给view,然后创建一个该类型的强类型视图,如
您的viewmodel
public class StudentView
{
public IEnumerable<string> StudentName { get; set; }
public double Gpa { get; set; }
public string School { get; set; }
}
如何定义范围?行标题和列标题将是预定义的值列表。现在我想,这里的范围不是最好的。我主要是寻找精确匹配,就像学校属性一样。如何定义范围?行标题和列标题将是预定义的值列表。现在我想,这里的范围不是最好的。我主要是在寻找与学校财产完全匹配的东西。你能解释一下这种情况下的“结果”是什么吗?我是否用这里的“student.school”和“student.gpa”替换我需要的特定值,例如{“school a”,2.0}?我如何使用这里的“results”填充视图中的表?再次感谢!谢谢你的解释!你能给我解释一下这个案子的“结果”是什么吗?我是否用这里的“student.school”和“student.gpa”替换我需要的特定值,例如{“school a”,2.0}?我如何使用这里的“results”填充视图中的表?再次感谢!谢谢你的解释!