首页 文章

获得两个数据表之间的区别?

提问于
浏览
-1

我有这个代码:

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

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

我之前在StackOverflow上看过这个问题,但是这个场景略有不同,所提出的解决方案(Merge GetChanges; AsEnumerable().Except )对我不起作用 . 结果 DataTable 包含所有行,双行或根本没有行 . DataTable 包含超过35000条记录 .

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

2 回答

  • 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

    我最终解决这个问题的方法是将DataTables导出到csv文件,然后使用(免费)diff库生成更改行的列表,然后将这些行导入另一个DataTable . 这足以在客户端上执行所有操作,因此我无需更改任何数据库脚本 .

相关问题