2013-01-07 30 views
-1

我有这样的代码:获取两个数据表之间的区别?

DataTable before = GetCustomerTable(); 
FixCustomerAddresses(); 
DataTable after = GetCustomerTable(); 

FixCustomerAddresses()方法不添加或删除的Customer表的任何行。它只是修改某些现有的行。

我想找出哪些行的列已被修改。有没有办法通过比较数据表之前/之后轻松完成此操作?我之前在StackOverflow上看到过这个问题,但这种情况稍有不同,所提出的解决方案(Merge + GetChanges; AsEnumerable().Except)不适用于我。结果DataTable包含所有行,双倍行或根本没有行。 DataTable包含超过35000条记录。

FixCustomerAddresses()只是在DataBase上运行脚本。没有简单的方法可以确定在该方法内哪些行已被更改。 DataTable包含主键,一些任意列,当然还有地址字段。

+0

你可以修改'FixCustomerAddresses()',使它具有追踪它更新哪些行的副作用吗? – Yuck

+0

“DataTable”有哪些字段? –

+0

编辑该问题以包含所需的信息。 – ilitirit

回答

0

我终于解决了这个问题的方法是,导出数据表到CSV文件,然后使用(免费)的比较库生成的列表改变了行,然后将这些行导入到另一个DataTable中。这足以在客户端上执行所有操作,所以我不需要更改任何数据库脚本。

0

你要比较各个领域,例如:

var modifiedRows = from beforeRow in before.AsEnumerable() 
        from afterRow in after.AsEnumerable() 
        where beforeRow.Field<int>("Col1") != afterRow.Field<int>("Col1") 
         || beforeRow.Field<string>("Col2") != afterRow.Field<string>("Col2") 
        select beforeRow; 
+0

考虑到大量记录时,此解决方案不可行。看来我可能不得不考虑一种完全不同的方法,可能是在数据库中做所有事情,然后导出更改。 – ilitirit