首页 > 解决方案 > 如何使用 LINQ 从每组中获取最大版本的记录?

问题描述

我有以下学生名单:

IList<Student> studentList = new List<Student>()
{ 
    new Student() { StudentID = 1, StudentName = "John", Age = 13 ,Version = 1, Group = 1},
    new Student() { StudentID = 2, StudentName = "Moin", Age = 21 ,Version = 2, Group = 1},
    new Student() { StudentID = 3, StudentName = "Bill", Age = 18, Version = 1, Group = 2},
    new Student() { StudentID = 4, StudentName = "Ram", Age = 20, Version = 1, Group = 3},
    new Student() { StudentID = 5, StudentName = "Ron", Age = 15, Version = 1, Group = 5},
    new Student() { StudentID = 6, StudentName = "yim", Age = 25, Version = 2, Group = 5},
};

如何获得包含每个组的最大版本的列表?什么是合适的 LINQ 查询?

输出应如下所示:

{ StudentID = 2, StudentName = "Moin", Age = 21, Version = 2, Group = 1 },
{ StudentID = 3, StudentName = "Bill", Age = 18, Version = 1, Group = 2 },
{ StudentID = 4, StudentName = "Ram", Age = 20, Version = 1, Group = 3 },
{ StudentID = 6, StudentName = "yim", Age = 25, Version = 2, Group = 5 },

标签: c#linq

解决方案


怎么样

var results = studentList.GroupBy(x => x.Group)
                         .Select(x => x.OrderByDescending(xx => xx.Version).First())
                         .ToList();

Group分组,然后按Version降序排列分组,然后从分组中取出第一个。


推荐阅读