选择lambda中的最佳得分

时间:2015-07-01 13:08:31

标签: 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 | score
------------------------------
 1 | Alex |    Math    |18
 2 | John |    Physics |19

1 个答案:

答案 0 :(得分:3)

您可以使用GroupBy

var query = students
    .GroupBy(s => s.CourseName )
    .Select(cg => cg.OrderByDescending(s => s.Score).First());

挑选每门课程的最佳学生。如果有多个具有相同的最高分数,您将获得一个任意学生。您可以使用它来选择所有最大学生:

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