此表存储学生课程名称和分数。我想创建一个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
答案 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());