2014-02-25 116 views
1

假設我有兩個數據表包含相同的列名,但記錄可能相同,也可能不相同。我的問題是如何在兩個數據表之間進行比較,並將它們合併爲一個新數據表。 例如:兩個數據表之間的比較併合併成新的數據表

數據表1

 
Name  value 
A   1 
B   2 
C   3 
D   4 

數據表2

 
Name value 
A  9 
B  2 
D  1 

新的DataTable(比較基於數據表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

我想下面的代碼將幫助您

'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 
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

相關問題