如何用LINQ获取每个Title对应的最新数据表记录?
按Title分组并获取每个组的最新日期项
原始集合
var raw = new[] { new { Title = "Sergio", Date= "18-12-2021"}, new { Title = "Sergio", Date= "18-10-2021"}, new { Title = "Sergio", Date= "18-11-2021"}, new { Title = "Jose", Date= "19-12-2021"}, new { Title = "Jose", Date= "18-12-2021"}, new { Title = "Jose", Date= "17-12-2021"}, new { Title = "Marco", Date= "16-12-2021"} };
需求
需要得到每个Title对应最新注册日期的集合,预期输出如下:
var result = new[] { new { Title = "Sergio", Date= "18-12-2021"}, new { Title = "Jose", Date= "19-12-2021"}, new { Title = "Marco", Date= "16-12-2021"} };
解决方案
你可以通过GroupBy分组后,对每个组内的元素按日期(转换为DateTime类型,避免字符串排序的误差)降序排列,再取第一个元素来实现:
var result = raw.GroupBy(item => item.Title) .Select(group => group.OrderByDescending(item => DateTime.ParseExact(item.Date, "dd-MM-yyyy", null) ).First() ) .ToArray();
关键说明
- 直接对
Date字符串排序会存在逻辑错误(例如"31-12-2021"字符串排序会落后于"01-01-2022",但实际日期更早),所以必须先通过DateTime.ParseExact将字符串转换为DateTime类型再进行比较。 GroupBy按Title分组后,每个组包含同一Title的所有元素,通过OrderByDescending按日期降序排列,取第一个元素就是该组的最新日期项。
内容的提问来源于stack exchange,提问作者Sergio Rondon Polanco
相关产品推荐
相关产品推荐

