Public Function getDifferentRecords(FirstDataTable As DataTable, SecondDataTable As DataTable) As DataTable 'Create Empty Table Dim ResultDataTable As New DataTable("ResultDataTable") ResultDataTable.Columns.Add("Action", GetType(String)) 'use a Dataset to make use of a DataRelation object Using ds As New DataSet() 'Add tables ds.Tables.AddRange(New DataTable() {FirstDataTable.Copy(), SecondDataTable.Copy()}) 'Get Columns for DataRelation Dim firstColumns As DataColumn() = New DataColumn(ds.Tables(0).Columns.Count - 1) {} Dim i As Integer = 0 While i < firstColumns.Length firstColumns(i) = ds.Tables(0).Columns(i) System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) End While Dim secondColumns As DataColumn() = New DataColumn(ds.Tables(1).Columns.Count - 1) {} i = 0 While i < secondColumns.Length secondColumns(i) = ds.Tables(1).Columns(i) System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) End While 'Create DataRelation Dim r1 As New DataRelation(String.Empty, firstColumns, secondColumns, False) ds.Relations.Add(r1) Dim r2 As New DataRelation(String.Empty, secondColumns, firstColumns, False) ds.Relations.Add(r2) 'Create columns for return table i = 0 While i < FirstDataTable.Columns.Count ResultDataTable.Columns.Add(FirstDataTable.Columns(i).ColumnName, FirstDataTable.Columns(i).DataType) System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) End While 'If FirstDataTable Row not in SecondDataTable, Add to ResultDataTable. ResultDataTable.BeginLoadData() For Each parentrow As DataRow In ds.Tables(0).Rows Dim childrows As DataRow() = parentrow.GetChildRows(r1) 'If childrows Is Nothing OrElse childrows.Length = 0 Then ' ResultDataTable.LoadDataRow(parentrow.ItemArray, True) 'End If If childrows Is Nothing Then ResultDataTable.LoadDataRow(parentrow.ItemArray, True) ElseIf childrows.Length = 0 Then ' ResultDataTable.LoadDataRow(parentrow.ItemArray, True) Dim id2 = parentrow For Each _row As DataRow In SecondDataTable.Rows If (_row(0) = id2(0)) Then For Each _col As DataColumn In FirstDataTable.Columns 'get specified column If _row(_col.ColumnName) <> parentrow(_col.ColumnName) Then 'display field value in 2nd table Dim strColumn = parentrow(_col.ColumnName).ToString() Dim newRow = ResultDataTable.NewRow() For Each _newRow In newRow.ItemArray For Each _colSource As DataColumn In ResultDataTable.Columns _newRow(_colsource)= Next Next Dim thisRow As DataRow = ResultDataTable.LoadDataRow(a, True) 'thisRow("Action") = "Update" ' ResultDataTable.LoadDataRow(parentrow.ItemArray, True) End If Next End If Next End If Next 'Dim dictTable1ID As New Dictionary(Of Integer, String) 'Dim dictTable2ID As New Dictionary(Of Integer, String) 'For Each tablerow1 As DataRow In ds.Tables(0).Rows ' dictTable1ID.Add(tablerow1(0), tablerow1(1)) 'Next 'For Each tablerow2 As DataRow In ds.Tables(1).Rows ' dictTable2ID.Add(tablerow2(0), tablerow2(1)) 'Next 'If SecondDataTable Row not in FirstDataTable, Add to ResultDataTable. For Each parentrow As DataRow In ds.Tables(1).Rows 'parentrow(0) Dim _found As Boolean = False For Each _row As DataRow In FirstDataTable.Rows If parentrow(0) = _row(0) Then _found = True End If Next If Not _found Then ResultDataTable.LoadDataRow(parentrow.ItemArray, True) End If Next ResultDataTable.EndLoadData() End Using Return ResultDataTable End Function
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)