使用LINQ从两个数据表中选择不同的行

时间:2016-02-22 16:29:22

标签: vb.net linq

我的任务是创建一个泛型类,它接受两个DataTable并返回另一个DataTable中的差异。发送到我的类的表保证具有相同的结构(相同的列数,相同的列名等),但数据可能会有所不同。这里的想法是,我会收到原始表格和表格,因为它已经更新。我已经有了一个可行的解决方案,但我想尝试看一下LINQ是否有一个可行的解决方案,因为我对它的经验很少。

我现在的解决方案是对两个表进行比较,当它找到匹配的任何行时,它会删除它们。到最后,剩下的唯一行是两个表不共享的行。

有没有人知道LINQ是否可行,以及该解决方案是什么样的?

1 个答案:

答案 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

我还没有对此进行测试,但它应该适合您的情况。

相关问题