比较2个相同类型的列表并删除重复项

时间:2020-08-07 16:58:51

标签: c# list

我正在尝试评估2个类型为“ AdditionalInformation”的列表,该列表具有Code属性

IList<AdditionalInformation> lis1
IList<AdditionalInformation> lis2

我正在合并两个列表

List<ICrmCdsAdditionalInformation> mergedList = lis1.Union(list2).ToList();

我需要做的是评估合并列表中的“代码”属性值,如果该属性值在合并列表中的任何对象上重复,则将所有重复对象除外,将其中一个删除。

合并列表如下:

 ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation
    {
        Code = "Duplicate",
    };

  ICrmCdsAdditionalInformation importerAi2 = new CrmCdsAdditionalInformation
    {
        Code = "Duplicate",
    };

   ICrmCdsAdditionalInformation importerAi3 = new CrmCdsAdditionalInformation
     {
        Code = "Unique1",
      };
   ICrmCdsAdditionalInformation importerAi2 = new CrmCdsAdditionalInformation
     {
        Code = "Duplicate",
     };

我需要删除除“重复项”之外的所有内容,因此我的结果应类似于:

   ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation
    {
        Code = "Duplicate",
    };

   ICrmCdsAdditionalInformation importerAi3 = new CrmCdsAdditionalInformation
     {
        Code = "Unique1",
      };

1 个答案:

答案 0 :(得分:1)

请参见MSDN中的Enumerable.Union。 创建一个IEqualityComparer类:

class AdditionalInfoComparer : IEqualityComparer<ICrmCdsAdditionalInformation> {
    public bool Equals(ICrmCdsAdditionalInformation x, ICrmCdsAdditionalInformation y) {
        if (Object.ReferenceEquals(x, y))
            return true;
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;
        return x.Code == y.Code;
    }

    // If Equals() returns true for a pair of objects
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(ICrmCdsAdditionalInformation info) {
        if (Object.ReferenceEquals(info, null)) return 0;

        return info.Code;
    }
}

然后,

var mergedList = list1.Union(list2, new AdditionalInfoComparer());