我有这个代码:
DataTable before = GetCustomerTable();
FixCustomerAddresses();
DataTable after = GetCustomerTable();
FixCustomerAddresses()
方法不会在 Customer
表上添加或删除任何行 . 它只是修改某些现有的行 .
我之前在StackOverflow上看过这个问题,但是这个场景略有不同,所提出的解决方案(Merge GetChanges; AsEnumerable().Except
)对我不起作用 . 结果 DataTable
包含所有行,双行或根本没有行 . DataTable
包含超过35000条记录 .
FixCustomerAddresses()
只是在DataBase上运行一个脚本 . 没有简单的方法可以确定在该方法中哪些行已更改 . DataTable包含主键,几个任意列,当然还有地址字段 .
2 回答
您必须比较所有字段,例如:
我最终解决这个问题的方法是将DataTables导出到csv文件,然后使用(免费)diff库生成更改行的列表,然后将这些行导入另一个DataTable . 这足以在客户端上执行所有操作,因此我无需更改任何数据库脚本 .