比较两个数据表并合并到新的数据表中

时间:2014-02-25 09:55:13

标签: vb.net datatable

假设我有两个数据表包含相同的列名,但记录可能相同也可能不同。我的问题是如何比较两个数据表和marge到新的数据表。 例如:

数据表1

Name     value
A           1
B           2
C           3   
D           4

数据表2

Name    value
A        9
B        2
D        1

新数据表(基于数据表1进行比较)

Name    value(From1)   value(From2)
A             1            9
B             2            2
C             3 
D             4            1

如果datatable1中不存在datatable2中的记录,则添加空白。这里数据表是从XML生成的。我正在使用vb.net 2008 express。

2 个答案:

答案 0 :(得分:2)

Name列上创建主键。然后确保value列具有不同的名称(例如value1value2)。然后只需使用Merge()

示例:

Dim dt1 = New DataTable()
dt1.Columns.Add("Name", GetType(String))
dt1.Columns.Add("value1", GetType(Integer))
dt1.Rows.Add({"A", 1})
dt1.Rows.Add({"B", 2})
dt1.Rows.Add({"C", 3})
dt1.Rows.Add({"D", 4})
dt1.PrimaryKey = {dt1.Columns("Name")}

Dim dt2 = New DataTable()
dt2.Columns.Add("Name", GetType(String))
dt2.Columns.Add("value2", GetType(Integer))
dt2.Rows.Add({"A", 9})
dt2.Rows.Add({"B", 2})
dt2.Rows.Add({"D", 1})
dt2.PrimaryKey = {dt2.Columns("Name")}

dt1.Merge(dt2)

dt1现在看起来像:

enter image description here

答案 1 :(得分:0)

我认为下面的代码可以帮助你

    'dtTable1 - First Table
    'dtTable2 - Secound Table
    'dtNewData - Result Table

    Dim dtNewData As New DataTable
    dtNewData = dtTable1.Copy()
    dtNewData.PrimaryKey = New DataColumn() {dtNewData.Columns("Name")}
    dtNewData.Columns.Add("Value2")
    For Each dr As DataRow In dtTable2.Rows
        If dtNewData.Rows.Contains(dr("Name")) = False Then
            Dim dr1 As DataRow = dtNewData.NewRow
            dr1("Name") = dr("Name")
            dr1("Value2") = dr("Value")
            dtNewData.Rows.Add(dr1)
        Else
            dtNewData.Rows.Find(dr("Name"))("Value2") = dr("Value")
        End If
    Next