我是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级列表
有没有办法做到这一点?
答案 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();