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

时间:2016-02-24 22:33:50

标签: c# .net performance linq

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

MyModel.objects.raw(sql, sql_params)

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

1 个答案:

答案 0 :(得分:5)

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

查询语法:

var result = (from obj1 in _list1
            join obj2 in _list2 on obj1.SpecialId equals obj2.SpecialId
            select obj1
            ).ToList();

方法语法:

var result = _list1.Join(_list2, obj1 => obj1.Id, obj2 => obj2.Id, (obj1, obj2) => obj1).ToList();

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