将列表组合<>由具有相同价值的特定财产

时间:2017-02-24 15:36:04

标签: c# linq model-view-controller

我是MVC的新手。 我有一个学生视图模型StudentVM,几乎没有属性。

public class StudentVM
{
    public int studentid { get; set; }
    public string Name { get; set; }
    public string Grade { get; set; }
    public int Age { get; set; }
}

在我的控制器中,我在列表中添加了几个值

 List<StudentVM> studentList = new List<StudentVM>();
        studentList.Add(new StudentVM {studentid=1,Name="John",Grade="A",Age=20 });
        studentList.Add(new StudentVM { studentid = 1, Name = "John", Grade = "A", Age = 20 });
        studentList.Add(new StudentVM { studentid = 2, Name = "Alex", Grade = "A", Age = 21 });
        studentList.Add(new StudentVM { studentid = 3, Name = "David", Grade = "A", Age = 19 });
        studentList.Add(new StudentVM { studentid = 4, Name = "Joe", Grade = "B", Age = 23 });
        studentList.Add(new StudentVM { studentid = 5, Name = "Mark", Grade = "B", Age = 22 });
        studentList.Add(new StudentVM { studentid = 6, Name = "Henry", Grade = "C", Age = 18 });
        studentList.Add(new StudentVM { studentid = 7, Name = "Gergin", Grade = "C", Age = 20 });
        studentList.Add(new StudentVM { studentid = 8, Name = "Jade", Grade = "C", Age = 25 });

        var listOfStudents = studentList;

请注意,某些列表具有相同的成绩。 (前四个列表的等级=“A”)

我需要的是另一个viewModel列表,它带有相同的列表,但按等级分组。

考虑到我的示例,我需要新的ViewModel列表包含3个列表 第一个列表必须包含4个列表(因为有4个相同年级的学生)。 第二个列表必须包含2个B级列表 第3个列表必须包含3个C级列表

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

所以要按等级将它们分开,你可以这样做

var groupedByGrade = studentList.GroupBy(x => x.Grade);

然后,如果你想制作每个组列表

var studentsByGrade = groupedByGrade.Select(x => x.ToList()).ToList();

然后,如果你真的想要一个List,其中包含每个学生的列表

var listsOfListOfStudents = studentsByGrade.Select(x => x.Select(y => new List<StudentVM> { y }).ToList()).ToList();

如果你把它们放在一起就可以做到这一点

var listsOfListOfStudents = studentList.GroupBy(x => x.Grade).Select(x => x.Select(y => new List<StudentVM> { y }).ToList()).ToList();