【发布时间】:2019-03-15 16:37:23
【问题描述】:
所以我试图让它尽可能简单,但坚持要找到我的两个列表之间的区别,这两个列表都包含一个名为“元素”的类。 每个“元素”都有 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();
这甚至无法编译。
提前致谢。
【问题讨论】:
-
MoreLinq 的
ExceptBy. -
"列表都包含一个名为“元素”的类。每个“元素”有 3 个属性 - 路径、名称、大小。" “...如果 ListA 有一个具有 ListB 没有的属性 Name 的元素。”这不是矛盾吗?
-
@mjwills 我该如何使用它?我已经添加了 NuGet 包。会像“diffList = ListA.MoreLinq.SequenceException...”还是怎么样?
-
使用需要
EqualityComparer的Except重载,您可以在其中比较Element类的Name属性:docs.microsoft.com/en-us/dotnet/api/… -
@Grimm 可能我无法解释清楚自己,我不是以英语为母语的人。我将尝试使用备份示例,假设 ListA 是从源目录填充的,而 ListB 是由目标填充的。因此,如果 ListA 有一个新文件,它将比 ListB 大,在这种情况下,我想知道 ListB 中哪个“元素”不同或缺失,希望这是可以理解的。