List。除了自定义类的属性外

时间:2019-03-15 08:30:57

标签: c# list linq

因此,我试图使其尽可能简单,但一直坚持寻找两个都包含一个称为“元素”的类的两个列表之间的区别。 每个“元素”都有3个属性-路径,名称,大小。现在,我想将ListA与ListB进行比较,如果ListA具有一个具有ListB没有的属性Name的元素。

我已经尝试过:

List<Element> diffList = from first in ListA
    join second in ListB
    on first.Name equals second.Name
    select first;

这很奇怪,因为ListA的最大计数约为60.000,而diffList的计数为2200万。 我也尝试过:

List<Element> diffList = ListA
    .Where(w => !ListB.Contains(w.Name))
    .ToList();

甚至无法编译。

谢谢。

1 个答案:

答案 0 :(得分:1)

您要Any()All(),而不是Contains()

var diff= ListA.Where(e1 => !ListB.Any(e2=> e2.Name.Equals(e1.Name))).ToList();
// or better
var diff= ListA.Select(e => e.Name).Except(ListB.Select(e => e.Name)).ToList();

对于大型馆藏来说,这可能不是最好的方法,如果可以避免的话,请保留您的馆藏为IEnumerables,直到需要投影结果为止。