尝试将输出转换为单个“组合”表,其中包含来自两个原始表的列。它们都有一个共同的日期戳列。给出的答案适用于具有固定列的数据表,但如果它们是动态创建的并且可以包含任意数量的列,我该如何加入它们?例如T1(datestamp,t1Column1,t1Column2,t1ColumnN...)T2(datestamp,t2Column1,t2Column2,t2ColumnN...)我想加入创建以下内容:J1(datestamp,t1Column1,t1Column2,t1ColumnN,...,t2Column1,t2Column2,t2ColumnN...)这可能吗?我找到了一个不依赖于遍历列的解决方案。它使用“Merge”方法,我之前认为这是因为我认为两个表需要相同的结构。首先,您需要在两个数据表上创建主键://setprimarykeyT1.PrimaryKey=newDataColumn[]{T1.Columns["DateStamp"]};T2.PrimaryKey=newDataColumn[]{T2.Columns["DateStamp"]};然后将两个表添加到数据集以添加关系://将两个数据表添加到数据集DataSetdsContainer=newDataSet();dsContainer.Tables.Add(T1);ds容器。表格.Add(T2);接下来在数据集中添加两个关键列之间的关系://添加两个时间戳列之间的关系DataRelationrelDateStamp=newDataRelation("Date",newDataColumn[]{T1.Columns["DateStamp"]},newDataColumn[]{T2.Columns["DateStamp"]});dsContainer.Relations.Add(relDateStamp);最后,您现在可以将第一个数据表复制到一个新的“复合”版本,然后合并到第二个中://populatecombineddataDataTabledtCombined=newDataTable();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)我认为您可以调整链接问题中的答案以使用列的索引而不是列名。或者您可以像这样遍历每一行中的项目://将其添加到组合表中}}在厌倦了看到所有这些不能可靠地模拟SQL的内部连接函数之后,我决定在这里创建自己的函数:privateDataTableJoinDataTables(DataTablet1,DataTablet2,paramsFunc[]joinOn){数据表结果=新数据表();foreach(DataColumncolint1.Columns){if(result.Columns[col.ColumnName]==null)result.Columns.Add(col.ColumnName,col.DataType);}foreach(DataColumncolint2.Columns){if(result.Columns[col.ColumnName]==null)result.Columns.Add(col.ColumnName,col.DataType);}foreach(DataRowrow1int1.Rows){varjoinRows=t2.AsEnumerable().Where(row2=>{foreach(varparameterinjoinOn){if(!parameter(row1,row2))returnfalse;}returntrue;});foreach(DataRowfromRowinjoinRows){DataRowinsertRow=result.NewRow();foreach(DataColumncol1int1.Columns){insertRow[col1.ColumnName]=row1[col1.ColumnN我];}foreach(DataColumncol2int2.Columns){insertRow[col2.ColumnName]=fromRow[col2.ColumnName];}result.Rows.Add(insertRow);}}返回结果;}如何使用这个例子:以上就是C#学习教程:C#DataTable内部连接和动态列共享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多加关注—vartest=JoinDataTables(transactionInfo,transactionItems,(row1,row2)=>row1.Field("TransactionID")==row2.Field("交易ID"));注明出处:
