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

合并两个List<DealResponse>列表并去除重复项的实现方案

嘿,针对你这个合并两个DealResponse列表并去重的需求,我给你两种实用的实现方案,你可以根据项目的.NET版本来选就行~

首先得明确:咱们判断两个DealResponse对象是不是重复,应该是看detailId和detailcd的字段组合吧?毕竟你给出的示例里,L1和L2都有detailId=5且detailcd=ABC的项,这肯定是要去重的重复项。


方法1:用DistinctBy(.NET 6+ 推荐)

这个方法最简洁,不用修改你的DealResponse类,直接通过指定去重的键来实现:

先把两个列表拼接,再用DistinctBy指定判断重复的字段组合:

// 合并L1和L2,再按detailId+detailcd去重
var combinedList = L1.Concat(L2)
                     .DistinctBy(item => new { item.detailId, item.detailcd })
                     .ToList();

解释:Concat负责把两个列表拼接成一个,DistinctBy会根据你传入的匿名类型(包含detailId和detailcd)筛选唯一项,最后转成List。这个方法在.NET 6及以后的版本支持,省心又高效。


方法2:实现IEquatable<T>接口(兼容旧.NET版本)

如果你的项目用的是.NET 5或更早版本,没有DistinctBy,那可以给DealResponse类实现IEquatable<T>接口,让系统明确知道怎么判断两个对象是否相等:

首先修改DealResponse类:

public class DealResponse : IEquatable<DealResponse>
{
    public string detailId { get; set; }
    public string detailcd { get; set; }
    public string fileName { get; set; }
    public string isNgo { get; set; }

    // 定义相等规则:detailId和detailcd都相等时,视为同一对象
    public bool Equals(DealResponse other)
    {
        if (other == null) return false;
        return detailId == other.detailId && detailcd == other.detailcd;
    }

    // 重写基类的Equals方法,保持逻辑一致
    public override bool Equals(object obj)
    {
        return Equals(obj as DealResponse);
    }

    // 重写GetHashCode,保证相等的对象哈希码一致
    public override int GetHashCode()
    {
        return HashCode.Combine(detailId, detailcd);
    }

    // 可选:重载==和!=运算符,让代码判断相等更直观
    public static bool operator ==(DealResponse left, DealResponse right)
    {
        return EqualityComparer<DealResponse>.Default.Equals(left, right);
    }

    public static bool operator !=(DealResponse left, DealResponse right)
    {
        return !(left == right);
    }
}

之后就可以用Union方法合并去重了:

var combinedList = L1.Union(L2).ToList();

解释:Union方法会自动调用我们实现的Equals方法判断重复,只保留唯一的项。


补充说明

如果你的“重复”定义不是detailId+detailcd,而是其他字段组合,只需要修改对应的部分就行:比如DistinctBy里的匿名类型字段,或者Equals方法里的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:40