如何在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
----------------------------------------------------------

当将未排序对象的列表传递到视图中时,有没有一种简单的方法可以实现这一点?这似乎是一个经常出现的问题,但我找不到任何现有的解决方案。有人能帮我吗?提前谢谢。

如何在asp.net mvc视图中将基于属性的对象分组到一个表中

您想要执行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);
相关文章: