比较两个数据表并在C#中获得差异行

时间:2015-09-11 06:42:32

标签: c# datatable compare

这是一个例子,假设我有两个数据表。

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

这两个表在diffenrence数据库中(具有相同的模式) 我将它们加载到两个DataTable中,并使用Except类似

查找差异行
dt_Table_1.AsEnumerable().Except(dt_Table_2.AsEnumerable())

使用Except仅返回新插入的行但不返回已编辑的行 我只是想获得编辑行 上面的表格只是示例,我的实际数据有很多行,所以我必须考虑性能。这就是为什么我不想为每一行进行循环。
有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

您可以简单地构造一个查询,该查询将为您提供已更改的行:

$ wget http://compling.hss.ntu.edu.sg/omw/wns/eng.zip
$ unzip eng.zip
$ cut -f3 eng/wn-data-eng.tab | (read;cat)

但是,如果您添加或删除行,它们将不会显示,您可以运行

select * from table_1 inner join table_2 on table_1.id=table_2.id and table_1.age<>table_2.age

要从table_1和

中删除所有内容
select * from table_1 where id not in (select id from table_2)

从表_2中删除行

您可以将它们全部合并到一个查询中,并通过运行以下内容来设置状态(已删除或已编辑):

select * from table_2 where id not in (select id from table_1)