【问题标题】:Linq Except on multiple class propertiesLinq 除了在多个类属性上
【发布时间】:2014-11-20 07:01:43
【问题描述】:

我拥有的是以下内容:

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

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

  1. 列表B中不存在
  2. 存在于listB中,文件名相同,但MD5不同

所以如下:

列表 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 应该能够很容易地做到这一点,但我一生都无法弄清楚如何,我认为除了可以工作,但我看到的所有示例都使用数字或单个属性。

【问题讨论】:

  • 如果您有代码,请在此处发布

标签: c# linq


【解决方案1】:

首先为您的类实现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 方法。

【讨论】:

  • 谢谢,我不敢相信我错过了通过自定义比较器的能力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多