繁体   English   中英

如何使用LINQ从每个集合中获取最大版本的记录?

[英]How to get maximum version of record from each set using 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 },

怎么样

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

按 Group 将它们Group ,然后按Version降序对分组进行排序,并从分组中获取第一个。

 var maxStudents = (from s in studentList
                    group s by s.Version into g
                    select new 
                    {
                      Version = g.Key,
                      MaxAge = g.Max(s => s.Age)
                    }).ToList();
// You'll be left with an array like: [{Version=1, MaxAge=21},...]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM