在 LINQ 中的 GroupBy 之后使用 OrderBy

Using an OrderBy after GroupBy in LINQ

我有一组学生,我想按 class 级别对他们进行分组,例如大一、大二、大三、大四。然后我想按 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 并在 Select 中移动 OrderBy 但我也无法让它工作。

如果你想从每个组中找出 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();