比较两个数据表并根据C#中的列名插入另一个表

时间:2018-05-07 06:17:12

标签: c#

我有两个数据表Table1Table2。我想比较一个值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

2 个答案:

答案 0 :(得分:1)

对于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中快照)

enter image description here

<强>更新

需要在循环中添加一个条件以检查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 && Convert.ToString(drtable1["Key"]).Trim() != string.Empty)
        {
             table3.Rows.Add(drtable2["Name"], drtable2[Convert.ToString(drtable1["SourceField"])], drtable1["Key"]);
        }
     }
 }

答案 1 :(得分:0)

您可以创建新的DataSet

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作为单独的数据表):

foreach (DataRow row1 in datatable1.Rows)
{
  foreach (DataRow row2 in datatable2.Rows)
  {
     //example comparasion
     if (row1["SourceField"] == row2["SourceField")
     {
       datatable3.Rows.Add(....) //see above examples how to add a row
     }
  }
}