我找到了一个不依赖于遍历列的解决方案。
它使用“合并”方法,我之前认为这两个表都需要相同的结构而将其忽略。
首先,您需要在两个数据表上创建一个主键:
// 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);
接下来添加数据集中两个关键列之间的关系:
// 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);
最后,您现在可以将第一个数据表复制到一个新的“组合”版本中,然后在第二个中合并:
// populate combined data
DataTable dtCombined = new DataTable();
dtCombined = T1.Copy();
dtCombined.Merge(T2, false, MissingSchemaAction.Add);
注意:Merge 方法要求第二个参数为 false,否则它会复制结构而不是第二个表的数据。
然后,这将组合下表:
T1 (2012-05-09, 111, 222)
T2 (2012-05-09, 333, 444, 555)
成基于主键的组合版本:
J1 (2012-05-09, 111, 222, 333, 444, 555)