在 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();
我有一组学生,我想按 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();