优化Linq Contains方法

时间:2012-04-01 15:16:55

标签: .net vb.net linq

我需要OldGuids中不属于NewGuids的列表,所以我使用了Contains方法,问题是它已经运行了半个多小时,有更快的方法吗?或需要多长时间?

Dim OldGuids As New List(Of Guid) ' 18 million rows
Dim NewGuids As New List(Of Guid) ' 6 million rows
Dim Filtered = From n In OldGuids Where Not NewGuids.Contains(n)

2 个答案:

答案 0 :(得分:3)

您应该使用HashSet<Guid> s。

然后您可以撰写OldGuids.IntersectWith(NewGuids)

答案 1 :(得分:2)

Filtered = OldGuids.Except(NewGuids)

(请注意,这只会返回唯一元素,如果你想保留重复项,这不是你想要的)。


var newGuidSet=new HashSet<Guid>(newGuids);
Filtered = OldGuids.Where(g=>!newGuidSet.Contains(g));