You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ查询获取按操作分组的最新Item记录?

获取每个操作类型的最新记录(Entity Framework)

这问题我碰到过好几次,用Linq分组加筛选就能轻松解决,分两种场景给你说明:

场景1:处理内存中的列表(比如你示例里的List<Item>)

如果数据已经在内存里了,直接用GroupBy配合MaxBy(.NET 6+推荐)或者排序取第一个就行:

.NET 6+ 简洁写法

var result = list
    .GroupBy(item => item.operation)
    .Select(group => group.MaxBy(item => DateTime.Parse(item.date)))
    .ToList();

兼容旧版本.NET的写法

如果你的项目用的是.NET 5及以下,没有MaxBy方法,可以用排序后取第一个:

var result = list
    .GroupBy(item => item.operation)
    .Select(group => group.OrderByDescending(item => DateTime.Parse(item.date)).First())
    .ToList();

场景2:直接从数据库查询(Entity Framework DbSet)

如果是直接对context.Items(数据库DbSet)查询,要避免客户端评估(也就是不要把全表数据拉到内存再处理),最好用EF内置的日期转换函数适配数据库:

以SQL Server为例,用EF.Functions.ToDateTime来转换字符串日期:

var result = context.Items
    .GroupBy(item => item.operation)
    .Select(group => group.OrderByDescending(item => EF.Functions.ToDateTime(item.date, "dd.MM.yyyy HH:mm:ss")).First())
    .ToList();

额外建议

如果可以的话,强烈建议把你的Item实体里的date字段类型从string改成DateTime(或者DateTimeOffset),这样不仅查询更高效,还能避免字符串转日期时的格式错误问题。

运行上面的代码后,就能得到你想要的结果:每个操作类型只保留最新日期的那条记录。

内容的提问来源于stack exchange,提问作者barteloma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:42:51