我正在尝试评估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",
};
答案 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());