【发布时间】:2018-08-09 13:49:54
【问题描述】:
我有一个关于检查一个列表中的对象是否存在于另一个列表中的问题,如果不存在,则全部由 Linq 将它们添加到第二个列表中。其实我有两个循环有一个条件:
foreach (var p in seznamVlaku.Select(s => s.ProjizdejiciStanicemi)) {
foreach (var l in p) {
if(_nodes.Any(a => a.ID != l.Key.ID)){
_nodes.Add(new Node() {Name = l.Key.Jmeno, ID = l.Key.ID, X = l.Key.X, Y = l.Key.Y });
}
}
}
可以通过 Linq 查询更快地做到这一点吗?
【问题讨论】:
-
这个
_nodes.Any(a => a.ID != l.Key.ID)的意思是'如果存在具有不同id 的节点则_nodes.Add(...)'。是错字吗?不应该是:!_nodes.Any(a => a.ID == l.Key.ID)吗? -
您可以使用
IEnumerable.Except()过滤掉存在于不同列表中的元素。NewList.AddRange(OriginalList.Except(TheOtherList)); -
@BradleyUffner 需要自定义相等比较器,或 MoreLinq 的
ExceptBy。 -
法比安你说得对:)
-
_nodes是List<T>集合吗?
标签: c# performance linq