我所拥有的是以下内容:
两个包含自定义对象的列表,这些对象包含多个属性,但此时我只关心两个文件名和MD5。
现在两个列表都包含相同的对象,基于这些属性不同的对象,我需要做的是从列表中获取所有对象a
以下内容:
列出A
somefile.exe 1234
someotherfile.exe 5678
missing.exe 4321
列表B
somefile.exe 1235
someotherfile.exe 5678
因此,最终列表应包含
列出C
somefile.exe 1234
missing.exe 4321
现在我已经被告知LINQ应该能够很容易地做到这一点,但我不能为我的生活弄清楚如何,我认为除了可行,但我看到的所有例子都使用数字,或单一属性。
答案 0 :(得分:4)
首先为您的类实现IEqualityComparer<T>
并根据您感兴趣的字段比较对象。例如,实现Equals
方法,如下所示:
public bool Equals(MyType a, MyType b)
{
return a.FileName == b.FileName && a.MD5 == b.MD5;
}
然后只需调用Except
方法并传递比较器:
var listC = listA.Except(listB, new MyEqualityComparer());
或者如果您在课堂上实施,而不是单独的比较器,您只需拨打Except
:
var listC = listA.Except(listB);
请注意,您还需要实施GetHashCode
方法。