Optimize Linq Contains method



我需要一个不在NewGuid中的OldGuid列表,所以我使用了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)

您应该使用HashSet<Guid> s.

然后可以编写OldGuids.IntersectWith(NewGuids)

Filtered = OldGuids.Except(NewGuids)

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


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

最新更新