我有一群学生,我想把他们按班级分组,比如新生,大二,初中,高级。然后我想通过GPA订购它们。
因此,如果我只想让学生获得最佳GPA,我的潜在结果将是:
Freshman - Name: James GPA : 3.9
Sophomore - Name: Jessie GPA : 4.0
Junior - Name: Caitlyn GPA: 3.9
Senior - Name: Joshua GPA: 3.95
我尝试过这样的事情:
var result = students.GroupBy(x => x.Level).OrderByDescending(x => x.GPA).Take(count).ToList();
但它总是打破,我不知道如何解决它。我已经尝试在它们之间进行选择并在Select中移动OrderBy,但我也无法使其工作。
答案 0 :(得分:1)
如果您想从每个小组中获得GPA最多的学生,您可以使用:
students.GroupBy(x => x.Level)
.Select(g => g.First(x => x.GPA == g.Max(y => y.GPA)))
.Take(count).ToList();
您还可以使用第三方库方法MaxBy
来更有效地执行此操作
students.GroupBy(x => x.Level)
.Select(g => g.MaxBy(x => x.GPA))
.Take(count).ToList();