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

如何用LINQ查询从对象字段内的数组生成唯一对象列表?

用LINQ简化合并并去重多个文件中的签名者对象

你原来的代码可以用LINQ一步完成,不需要先把所有签名者加到临时集合里再去重,直接用SelectMany扁平化所有文件的签名者序列,再调用Distinct就能得到唯一的签名者数组:

var uniqueSigners = files.SelectMany(file => file.signers).Distinct().ToArray();

如果你的Signer对象默认的相等判断不符合需求(比如需要根据特定属性去重),可以给Distinct传入自定义的相等比较器:

// 先定义一个自定义比较器类
public class SignerEqualityComparer : IEqualityComparer<Signer>
{
    public bool Equals(Signer x, Signer y)
    {
        // 这里根据你的需求实现相等判断逻辑,比如比较Id
        return x.Id == y.Id;
    }

    public int GetHashCode(Signer obj)
    {
        return obj.Id.GetHashCode();
    }
}

// 然后使用
var uniqueSigners = files.SelectMany(file => file.signers)
                         .Distinct(new SignerEqualityComparer())
                         .ToArray();

SelectMany的作用是把每个文件对应的signers数组展开成一个连续的Signer序列,之后Distinct会自动剔除重复项,最后用ToArray()转换成你需要的数组类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:25