-1

私はこのコードを持っています:

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

このメソッドは、テーブルFixCustomerAddresses()の行を追加または削除しません。Customer特定の既存の行を変更するだけです。

どの行に変更された列があるかを把握したいと思います。前/後のデータテーブルを比較することでこれを簡単に行う方法はありますか? 以前に StackOverflow でこの質問を見たことがありますが、このシナリオは少し異なり、提案された解決策 (Merge + GetChanges; AsEnumerable().Except) はうまくいきません。結果DataTableには、すべての行が含まれるか、行が 2 倍になるか、行がまったく含まれないかのいずれかです。にはDataTable35000 を超えるレコードが含まれています。

FixCustomerAddresses()データベースでスクリプトを実行するだけです。そのメソッド内で変更された行を特定する簡単な方法はありません。DataTable には、主キー、いくつかの任意の列、そしてもちろん住所フィールドが含まれています。

4

2 に答える 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;
于 2013-01-07T12:48:59.820 に答える
0

私が最終的にこれを解決した方法は、DataTables を csv ファイルにエクスポートし、(無料の) diff ライブラリを使用して変更された行のリストを生成し、それらの行を別の DataTable にインポートすることでした。これは、クライアント上ですべてを実行するのに十分な速さであるため、データベース スクリプトを変更する必要はありませんでした。

于 2013-01-08T14:38:11.797 に答える