我有两个对象列表(列表1和列表2),我需要从列表1创建第三个对象列表,它们与列表2中的至少一个对象共享一个属性值。我创建了以下linq查询到但是,它很慢(在很大程度上,毫无疑问,因为两个起始列表最多可包含200,000个对象)。
MyModel.objects.raw(sql, sql_params)
是否有更有效的方法在代码中实现它(可能首先不使用linq)?
答案 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倍。