我的任务是创建一个泛型类,它接受两个DataTable并返回另一个DataTable中的差异。发送到我的类的表保证具有相同的结构(相同的列数,相同的列名等),但数据可能会有所不同。这里的想法是,我会收到原始表格和表格,因为它已经更新。我已经有了一个可行的解决方案,但我想尝试看一下LINQ是否有一个可行的解决方案,因为我对它的经验很少。
我现在的解决方案是对两个表进行比较,当它找到匹配的任何行时,它会删除它们。到最后,剩下的唯一行是两个表不共享的行。
有没有人知道LINQ是否可行,以及该解决方案是什么样的?
答案 0 :(得分:0)
您可以使用Except
,它会比较两个集合并返回差异......
Dim tbl1 As DataTable = ds.Tables("tbl1")
Dim tbl2 As DataTable = ds.Tables("tbl2")
Dim diff = tbl1.AsEnumerable().Except(tbl2.AsEnumerable(), DataRowComparer.[Default])
您可以将此包装在一个以两个数据项作为输入的方法中,返回 diff 。
Public Function GetDifference(tbl1 As DataTable, tbl2 As DataTable) As DataTable
Return tbl1.AsEnumerable().Except(tbl2.AsEnumerable(), DataRowComparer.[Default])
End Function
我还没有对此进行测试,但它应该适合您的情况。