さまざまなソース(SQLおよびMS Access)からメモリにロードされたDataTableがいくつかあり、各データセットには複数の列があり、各データセット間で同じ列のサブセットのみが含まれています。私はいくつかのデータ同期コードに取り組んでおり、これらのデータテーブルを比較したいのですが、それらが共通している列に基づいてのみ比較します。必要な場合は、おそらく多くのループでこれを行うことができますが、LINQをより快適に使用し、より簡潔なコードを使用したいと考えています。
これまでのところ、各データテーブルから列名のリストを取得し、Intersectを使用して、次のように両方に共通の列名のリストを取得しました。
private string[] Common_ColumnNames {
get {
// get column names from source & destination data
string[] src_columnNames =
(from dc in _srcDataTable.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
string[] dest_columnNames =
(from dc in _destDataTable.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
// find the column names common between the two data sets
// - these are the columns to be compared when synchronizing
return src_columnNames.Intersect( dest_columnNames ).ToArray();
}
}
今、私は立ち往生しています...各DataTableからすべての行を選択する必要がありますが、それらの共通の列のみを選択します。私の頭の中で、これはいくつかの異なる方法で機能していることがわかります。
1)データテーブルからすべての行を選択し、目的の列リストstring []変数を渡して、必要な列をLINQに通知します
2)データテーブルからすべての行を選択し、ラムダ関数(私にとってもかなり新しい)を使用して各行から不要な列を削除し、いくつかの削除された列を含む新しいデータテーブルを出力します。
これを実現する方法についてのアドバイス/提案をいただければ幸いです。ありがとう!