データテーブルのリストがあります。それらを単一のデータテーブルにまとめる最も効率的な方法は何ですか? これらの各データ テーブルのスキーマは異なり、これらのテーブルの行数は異なる場合があります。
すなわち
Table1 には列 A、B があります
Table2 には列 C、D があります
Table3 には列 E、F があります
私の出力は、上記のすべての列を含む結果テーブルであり、すべての行が含まれている必要があります。
数行のコードで達成できますか? LINQ はオプションでしょうか?
Mergeメソッドを使用しました。http://msdn.microsoft.com/en-us/library/fk68ew7b.aspxを参照してください。
あなたのコメントに基づいて更新します。各テーブルに 2 つの列しかない場合、Merge期待どおりにメソッドを使用することはできません。
必要なことを行うには、各テーブルに主キーが必要です。行にテーブル間で共通の識別子がある場合、行が追加されるのではなく、列が結合されます。たとえば、RowId 1 が Table1 と Table 2 の両方にある場合、RowId 1 が取得されます。A、B、C、D、ヌル、ヌル。RowId 2 が Table1 のみにある場合は、RowId2 を取得します。A、B、ヌル、ヌル、ヌル、ヌル。
http://msdn.microsoft.com/en-us/library/system.data.missingschemaaction.aspx
ユーザーは、各 DataTable に主キー制約を明示的に設定できます。これにより、既存のレコードと一致する着信レコードが追加されるのではなく更新されます。
上記の質問に対する解決策:
DataColumn[] keys = new DataColumn[1];
DT.Columns.Add(primaryColumn, typeof(System.Int32));
for (int i = 0; i < DT.Rows.Count; i++)
{
DT.Rows[i][primaryColumn] = i;
}
keys[0] = DT.Columns[primaryColumn];
mapDT.PrimaryKey = keys;
tables.Add(DT);
private static DataTable MergeDataTables(List<DataTable> tables, string keyColumn)
{
DataTable mergedTable = new DataTable();
foreach (DataTable dt in tables)
mergedTable.Merge(dt);
mergedTable.PrimaryKey = null;
mergedTable.Columns.Remove(keyColumn);
return mergedTable;
}
それが役立つことを願っています。