列のループに依存しない解決策を見つけました。
これは、両方のテーブルに同じ構造が必要だと思ったために以前に却下した「マージ」メソッドを使用します。
まず、2つのデータテーブルに主キーを作成する必要があります。
// set primary key
T1.PrimaryKey = new DataColumn[] { T1.Columns["DateStamp"] };
T2.PrimaryKey = new DataColumn[] { T2.Columns["DateStamp"] };
次に、両方のテーブルをデータセットに追加して、関係を追加できるようにします。
// add both data-tables to data-set
DataSet dsContainer = new DataSet();
dsContainer.Tables.Add(T1);
dsContainer.Tables.Add(T2);
次に、データセットの2つのキー列間の関係を追加します。
// add a relationship between the two timestamp columns
DataRelation relDateStamp = new DataRelation("Date", new DataColumn[] { T1.Columns["DateStamp"] }, new DataColumn[] { T2.Columns["DateStamp"] });
dsContainer.Relations.Add(relDateStamp);
最後に、最初のデータテーブルを新しい「結合された」バージョンにコピーしてから、2番目のデータテーブルにマージできます。
// populate combined data
DataTable dtCombined = new DataTable();
dtCombined = T1.Copy();
dtCombined.Merge(T2, false, MissingSchemaAction.Add);
注:Mergeメソッドでは、2番目の引数がfalseである必要があります。そうでない場合、構造はコピーされますが、2番目のテーブルのデータはコピーされません。
これにより、次のテーブルが結合されます。
T1 (2012-05-09, 111, 222)
T2 (2012-05-09, 333, 444, 555)
主キーに基づいて結合されたバージョンに:
J1 (2012-05-09, 111, 222, 333, 444, 555)