使用lambda表达式在两个数据表中获取重复行

时间:2013-08-20 05:14:08

标签: vb.net

我有两个具有相同结构的数据表,一些行具有重复的键。所以我想使用lambda表达式来获取表1中的所有记录,这些记录的密钥与表2中的任何行的键重复。我试图使用它:假设item1item2是键< / p>

Dim result as IEnumerable(Of DataRow) = table1.Asenumerable.Where(function(t1) _
table2.AsEnumerable().Any(function(t2) t1("item1") = t2("item1") _
andalso t1("item2") = t2("item2")))

但是这段代码片段总是不给我任何结果(result.count = 0),尽管两张桌子之间有重复

P / S:抱歉我的英语不好

1 个答案:

答案 0 :(得分:1)

我会尝试以下:

' prepare HashSet from keys from table2 '
Dim table2Keys = new HashSet(Of Tuple(Of String, String))
set.UnionWith(table2.AsEnumerable().Select(Function(x) Tuple.Create(x("item1"), x("item2"))

' search table1 for duplicates '
Dim result = table1.Where(Function(x) table2Keys.Contains(Tuple.Create(x("item1", y("item2")))

它应该比使用Any具有更好的性能,因为HashSet查找可以在 O(1)中完成。