假设我有两个数据表包含相同的列名,但记录可能相同也可能不同。我的问题是如何比较两个数据表和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。
答案 0 :(得分:2)
在Name
列上创建主键。然后确保value
列具有不同的名称(例如value1
和value2
)。然后只需使用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
现在看起来像:
答案 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