在LINQ中使用GroupBy之后的OrderBy

时间:2015-02-10 11:09:56

标签: c# asp.net .net linq

我有一群学生,我想把他们按班级分组,比如新生,大二,初中,高级。然后我想通过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,但我也无法使其工作。

1 个答案:

答案 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();