You need to enable JavaScript to run this app. 如何查找PersonToolDto列表重复项并保留时间最新的条目
优惠活动
大模型
产品
解决方案
定价
更多

如何查找PersonToolDto列表重复项并保留时间最新的条目

你之前仅按PersonId分组无法正确去重,是因为重复项的判定逻辑应该是同一个PersonId + 同一个ToolId才算同一条重复数据,仅按PersonId分组会把同一个人绑定不同工具的条目也分到同一组,不符合业务规则。

以下是两种LINQ实现方案:

常规实现(代码简洁,适合中小数据量)

var result = personToolListFromSomeSource
    // 合并两个数据源的列表
    .Concat(personToolListFromAnotherSource)
    // 按 PersonId+ToolId 组合作为重复判定的分组键
    .GroupBy(x => new { x.PersonId, x.ToolId })
    // 每个分组内取CreatedAt最新的条目
    .Select(g => g.OrderByDescending(item => item.CreatedAt).First())
    // 转成List结构返回
    .ToList();

高性能实现(无需排序,适合大数据量场景)

如果你的数据量很大,排序会带来额外性能开销,可以遍历分组一次直接找时间最新的条目:

var result = personToolListFromSomeSource
    .Concat(personToolListFromAnotherSource)
    .GroupBy(x => new { x.PersonId, x.ToolId })
    .Select(g => 
    {
        var latestItem = g.First();
        foreach (var item in g)
        {
            if (item.CreatedAt > latestItem.CreatedAt)
            {
                latestItem = item;
            }
        }
        return latestItem;
    })
    .ToList();

以上两种方案最终输出的result都是List<PersonToolDto>类型,完全符合要求。用你给出的示例数据运行的话,最终会得到3条数据,其中PersonId=1、ToolId=1的条目会保留2021-07-07的版本,其余条目不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:15:02