gpt4 book ai didi

C# DataTable 内部连接动态列

转载 作者:太空狗 更新时间:2023-10-29 21:18:45 35 4
gpt4 key购买 nike

我正在尝试以与此问题类似的方式将两个数据表连接在一起:

Inner join of DataTables in C#

我试图让输出成为一个“组合”表,其中包含来自两个原始表的列。它们都有一个共同的日期戳列。

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

例如

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

我想加入创建以下内容:

J1 (datestamp, t1Column1, t1Column2, t1ColumnN, ..., t2Column1, t2Column2, 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, 111, 222, 333, 444, 555)

关于C# DataTable 内部连接动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502512/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com