我有两个具有相同结构的数据表,一些行具有重复的键。所以我想使用lambda表达式来获取表1中的所有记录,这些记录的密钥与表2中的任何行的键重复。我试图使用它:假设item1
和item2
是键< / 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
),尽管两张桌子之间有重复
答案 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)中完成。