【发布时间】:2015-09-11 06:42:32
【问题描述】:
这是一个例子,假设我有两个数据表。
Table_1
id name age
===================
1 john 20
2 henry 25
3 sam 18
4 tom 30
Table_2
id name age
===================
1 john 20
2 henry 26 <=== Edited Row
3 sam 19 <=== Edited Row
4 tom 30
这两个表在不同的数据库中(具有相同的架构)。
我将它们加载到两个 DataTable 中,并使用 Except 像
dt_Table_1.AsEnumerable().Except(dt_Table_2.AsEnumerable())
使用 Except 仅返回新插入的行,但不返回已编辑的行。
我只想获取已编辑的行。
上面的表格只是例子,我的真实数据有很多行,所以我必须考虑性能。这就是为什么我不想为每一行循环。
有没有更好的办法?
【问题讨论】:
-
Linq 并不神奇。
Except被实现为:Set<TSource> set = new Set<TSource>(comparer); foreach (TSource element in second) set.Add(element); foreach (TSource element in first) if (set.Add(element)) yield return element;- 所以你会得到 n*m 循环。 -
Enumerable.Except 具有指定比较器 msdn.microsoft.com/en-us/library/vstudio/… 的静态重载,您可以根据需要定义它。但是,您的 LINQ 的紧凑性消失了 :-(