C#DataTable内部联接与动态列
发布时间:2020-12-15 08:23:43 所属栏目:百科 来源:网络整理
导读:我试图以与此问题类似的方式将两个DataTable连接在一起: Inner join of DataTables in C# 我正在尝试将输出变为单个“组合”表,其中包含两个原始表中的列.它们都有一个共同的日期戳列. 给出的答案适用于具有固定列的DataTables,但如果它们是动态创建的,并且
我试图以与此问题类似的方式将两个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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |