C# 比较两个数据表并根据C中的列名插入另一个表#
我有两个数据表C# 比较两个数据表并根据C中的列名插入另一个表#,c#,C#,我有两个数据表Table1和Table2。我想比较一个值SourceField,并将这两个表的行插入到一个新的数据表中 表#1-映射表 Key SourceField ------------------ null name A101 V1 A102 V2 A103 V3 表2-源表 Name V1 V2 V3 ----------------------- 10001 1 2 3 表3-输出表 Name Value
Table1
和Table2
。我想比较一个值SourceField
,并将这两个表的行插入到一个新的数据表中
表#1-映射表
Key SourceField
------------------
null name
A101 V1
A102 V2
A103 V3
表2-源表
Name V1 V2 V3
-----------------------
10001 1 2 3
表3-输出表
Name Value Key
--------------------
10001 1 A101
10001 2 A102
10001 3 A103
问候,,
Manish您可以创建一个新的
数据集
:
DataSet dset = new DataSet();
DataTable datatable3 = new DataTable("OutputTable");
datatable3.Columns.Add(new DataColumn("Name",typeof(string)));
datatable3.Columns.Add(new DataColumn("Value", typeof(int)));
datatable3.Columns.Add(new DataColumn("Key", typeof(string)));
//do a foreach or any other operation here
//you can add a new row to the datatable like that:
drow["Name"] = "10001";
drow["Value"] = 3;
drow["Key"] = "A103";
DataRow drow = datatable3.NewRow();
datatable3.Rows.Add(drow);
//after adding ALL rows, you have to add the datatable to the dataset
dset.Tables.Add(datatable3);
循环遍历现有数据集(我假设您已经将ds1和ds2作为单独的数据表):
对于
DataTable
,以下解决方案适用于您
我测试过了。我使用了你在问题中提到的相同结构
DataTable table1 = new DataTable();
table1.Columns.Add("Key");
table1.Columns.Add("SourceField");
table1.Rows.Add("A101", "V1");
table1.Rows.Add("A102", "V2");
table1.Rows.Add("A103", "V3");
DataTable table2 = new DataTable();
table2.Columns.Add("Name");
table2.Columns.Add("V1");
table2.Columns.Add("V2");
table2.Columns.Add("V3");
table2.Rows.Add("10001", 1, 2, 3);
DataTable table3 = new DataTable();
table3.Columns.Add("Name");
table3.Columns.Add("Value");
table3.Columns.Add("Key");
// LOOP FOR COMPARING THE DIFFERENT COLUMNS AND VALUES FROM DIFFERENT DATATABLES
foreach (DataRow drtable1 in table1.Rows)
{
foreach (DataRow drtable2 in table2.Rows)
{
if ( drtable2[Convert.ToString(drtable1["SourceField"])] != null)
{
table3.Rows.Add(drtable2["Name"], drtable2[Convert.ToString(drtable1["SourceField"])], drtable1["Key"]);
}
}
}
结果(来自Visual Studio的快照)
更新
需要在循环中再添加一个条件,用于检查键的空白值
// LOOP FOR COMPARING THE DIFFERENT COLUMNS AND VALUES FROM DIFFERENT DATATABLES
foreach (DataRow drtable1 in table1.Rows)
{
foreach (DataRow drtable2 in table2.Rows)
{
if (drtable2[Convert.ToString(drtable1["SourceField"])] != null && Convert.ToString(drtable1["Key"]).Trim() != string.Empty)
{
table3.Rows.Add(drtable2["Name"], drtable2[Convert.ToString(drtable1["SourceField"])], drtable1["Key"]);
}
}
}
你试过什么?有错误吗?我是.Net新手,我不知道如何以C#的给定格式将表3放入,请帮助我。表2中的值不在表2中;您的意思是要匹配的V1
等值吗?您在哪里根据列名对值进行比较?他清楚地提到他想要什么结果?我认为你的答案不是指向解决方案。您所提供的只是创建一个DataTable和DataSet。请更新答案。@GaurangDave您的解决方案已经完成。我只是想提供一种开始解决问题的方法,因为我认为完整的教程不应该出现在这里。我将添加一个比较的例子,但我认为我们应该将您的答案作为解决方案保留在这里谢谢:)我建议您编辑您的答案,并提供一些解释或示例,因为我发现它有点误导实际概念。希望您能理解。谢谢,它可以正常工作,但表1中的“名称”行对于每一行都是空的,因为键是空的,所以我们如何为每一行删除它field@MANISH检查答案中的更新,如果有用,则标记为“答案/投票”。让我知道你还有什么疑问。
// LOOP FOR COMPARING THE DIFFERENT COLUMNS AND VALUES FROM DIFFERENT DATATABLES
foreach (DataRow drtable1 in table1.Rows)
{
foreach (DataRow drtable2 in table2.Rows)
{
if (drtable2[Convert.ToString(drtable1["SourceField"])] != null && Convert.ToString(drtable1["Key"]).Trim() != string.Empty)
{
table3.Rows.Add(drtable2["Name"], drtable2[Convert.ToString(drtable1["SourceField"])], drtable1["Key"]);
}
}
}