因此,我试图使其尽可能简单,但一直坚持寻找两个都包含一个称为“元素”的类的两个列表之间的区别。 每个“元素”都有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();
甚至无法编译。
谢谢。
答案 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,直到需要投影结果为止。