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

如何用LINQ过滤对象中各Company/Division组的最新记录

问题描述

我有一个反序列化后的JSON对象,需要在处理前进行过滤。数据结构如下:

CompanyDivisionLastModDate其他字段/对象
12317/1/2021
12318/1/2022
12328/1/2022

需求是保留原对象的全部信息,移除每个Company/Division组中非最新的记录。

我已经尝试了以下代码,但不知道后续该如何操作:

var filtered = origObject.GroupBy(g=> new {g.Company,g.Division})

如果用SQL实现,我会使用row_number()函数并取第一条记录。

解决方案

你可以在分组后对每组内的记录按LastModDate降序排序,再取每组的第一条,这和SQL里用row_number()分区排序取第一条的逻辑完全对应,还能保留原对象的所有字段。

完整代码如下:

var filtered = origObject
    .GroupBy(g => new { g.Company, g.Division })
    .Select(group => group.OrderByDescending(item => item.LastModDate).FirstOrDefault())
    .Where(item => item != null) // 可选:过滤空分组,根据实际数据情况决定是否保留
    .ToList();

关键步骤说明

  • 分组:用GroupBy按Company和Division组合键分组,把同公司同部门的记录归为一组。
  • 组内排序:每个组内按LastModDate降序排列,确保最新的记录排在最前面。
  • 取最新记录:用FirstOrDefault()获取每组的第一条,也就是该组的最新记录。
  • 空值过滤:Where(item => item != null)是可选操作,避免原数据存在空分组时返回null值。

这样处理后,filtered集合里就只保留了每个Company/Division组的最新完整对象,所有原有的字段和嵌套对象都会被完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:30:59