优化linq查询以从两个列表中收集匹配的对象

fyo*_*anz 0 .net c# linq performance

我有两个对象列表(列表1和列表2),我需要从列表1创建第三个对象列表,它们与列表2中的至少一个对象共享一个属性值.我创建了以下linq查询来执行此操作,但是,它很慢(在很大程度上,毫无疑问,因为两个起始列表最多可以包含200,000个对象).

(from obj1 in _list1
 from obj2 in _list2
 where obj1.SpecialId == obj2.SpecialId
 select obj1)
.ToList();
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法在代码中实现它(可能首先没有使用linq)?

mon*_*oh_ 5

您可以使用LINQ Join执行此操作.

查询语法:

var result = (from obj1 in _list1
            join obj2 in _list2 on obj1.SpecialId equals obj2.SpecialId
            select obj1
            ).ToList();
Run Code Online (Sandbox Code Playgroud)

方法语法:

var result = _list1.Join(_list2, obj1 => obj1.Id, obj2 => obj2.Id, (obj1, obj2) => obj1).ToList();
Run Code Online (Sandbox Code Playgroud)

根据我的简单测试,版本Join比原始版本快约5-6倍.