Linq 使用lambda选择课程中的最佳分数

Linq 使用lambda选择课程中的最佳分数,linq,lambda,Linq,Lambda,此表存储学生课程名称和分数。我想创建一个lambda表达式来选择每门课程中最好的学生 ID | name | courseName | score ------------------------------ 1 | Alex | Math | 18 2 | John | physics | 19 3 | Sam | Math | 17 4 | Sarah| physics | 14 期望的结果 ID | name | courseName | s

此表存储学生课程名称和分数。我想创建一个lambda表达式来选择每门课程中最好的学生

ID | name | courseName | score
------------------------------
 1 | Alex |   Math     | 18
 2 | John |   physics  | 19
 3 | Sam  |   Math     | 17
 4 | Sarah|   physics  | 14
期望的结果

ID | name | courseName | score
------------------------------
 1 | Alex |    Math    |18
 2 | John |    Physics |19

您可以使用
GroupBy

var query = students
    .GroupBy(s => s.CourseName )
    .Select(cg => cg.OrderByDescending(s => s.Score).First());
这就选出了每门课程中最好的学生。如果有多个学生的最高分数相同,则可以得到任意一个学生。您可以使用此选项选择所有max学生:

IEnumerable<Student> query = students
    .GroupBy(s => s.CourseName)
    .SelectMany(cg => cg.GroupBy(s => s.Score).OrderByDescending(g => g.Key).First());
IEnumerable query=学生
.GroupBy(s=>s.CourseName)
.SelectMany(cg=>cg.GroupBy(s=>s.Score).OrderByDescending(g=>g.Key.First());

如果有多个学生的最高分数相同怎么办?@TimSchmelter我想选择此示例中任何课程的最高分数数学最高分数为18,学生名为Alex,物理课程最高分数为19,学生名为JohnNo,我的问题的意思不同。如果
数学
有两名学生的成绩为18分,你想让学生做什么?谢谢你的回答,什么时候在OrderBy之后使用。。。编译器返回错误给我,方法“第一”只能用作最终的查询操作。FirstOrDefault@imanmir看来,您的LINQ提供程序(F.E.LINQ到实体)在查询的中间不支持<代码>第一/代码>。因此,按照建议使用
FirstOrdefault