【发布时间】:2016-06-16 16:43:12
【问题描述】:
我有两个具有相同架构(相同列名和类型)的数据表。我想获取出现在第一个而不是第二个的行。 有人可以帮我吗?谢谢。
【问题讨论】:
-
你可以使用 Linq 的 except。您可能必须提供自己的 EqualityComparer。
-
@WilliamXifaras 您提到的问题中的答案不起作用:它返回两个数据表中的行。
我有两个具有相同架构(相同列名和类型)的数据表。我想获取出现在第一个而不是第二个的行。 有人可以帮我吗?谢谢。
【问题讨论】:
值得庆幸的是,MS 创建了extension methods for DataTable,让您可以使用Linq 方法(如Except)来查询数据行,并编写了一个class that implements IEqualityComparer<DataRow>,通过它们的列值比较DataRow 实例:
var rows = dt1.AsEnumerable()
.Except(dt2.AsEnumerable(),DataRowComparer.Default);
【讨论】:
我会这样写:
var onlyIn1 = dataTable1.Where( row1 => !dataTable2.Rows.Any( row2 => row1["CustomerKey"] == row2["CustomerKey"]) ).ToList();
【讨论】:
你可以试试这个:
var onlyIn1 = db.Table1.Except(db.Table2).ToList();
我从不测试这个,但它应该像 T-SQL 的 EXCEPT 一样工作
【讨论】: