C#DataTable内部联接与动态列

我试图以与此问题类似的方式将两个DataTable连接在一起:

Inner join of DataTables in C#

我正在尝试将输出变为单个“组合”表,其中包含两个原始表中的列.它们都有一个共同的日期戳列.

给出的答案适用于具有固定列的DataTables,但如果它们是动态创建的,并且可以包含任意数量的列,那么我该如何加入它们呢?

例如

T1 (datestamp,t1Column1,t1Column2,t1ColumnN...)
T2 (datestamp,t2Column1,t2Column2,t2ColumnN...)

我想加入以创建以下内容:

J1 (datestamp,t1ColumnN,...,t2ColumnN...)

这可能吗?

解决方法

我发现了一种不依赖于循环遍历列的解决方案.

它使用了’Merge’方法,我之前认为这是因为我认为两个表都需要相同的结构.

首先,您需要在两个数据表上创建主键:

// 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,222,555)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号