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"]);
        }
     }
 }