C# 如何在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的不同范围,每行是一所学校。在表中的每个单元格中,我想

我对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
----------------------------------------------------------

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

您想要执行
分组方式,可以使用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”填充视图中的表?再次感谢!谢谢你的解释!