Linq除了多个类属性外

时间:2014-09-25 13:20:08

标签: c# linq

我所拥有的是以下内容:

两个包含自定义对象的列表,这些对象包含多个属性,但此时我只关心两个文件名和MD5。

现在两个列表都包含相同的对象,基于这些属性不同的对象,我需要做的是从列表中获取所有对象a

  1. listB中不存在
  2. 列表B中存在,具有相同的文件名,但具有不同的MD5
  3. 以下内容:

    列出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应该能够很容易地做到这一点,但我不能为我的生活弄清楚如何,我认为除了可行,但我看到的所有例子都使用数字,或单一属性。

1 个答案:

答案 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方法。