我想知道这两个linq语句之间的区别是什么?
什么更快?
他们是一样的吗?
此声明之间有什么区别
from c in categories
from p in products
where c.cid == p.pid
select new { c.cname, p.pname };
和这句话?
from c in categories
join p in products on c.cid equals p.pid
select new { c.cname, p.pname };
先谢谢你们。
编辑:在LINQ to Objects的背景下
答案 0 :(得分:15)
好的,在LINQ to Objects中,差异可能非常大。
第一个表单检查每个 c
和p
对,检查c.cid
是否等于p.pid
并产生匹配。
第二种形式(在Join
内)首先创建从pid
到匹配Product
元素的基于散列的查找。然后它流式传输categories
,然后根据Product
检查查找中匹配c.cid
个元素的每个类别。这通常更有效,因为它只需要查看products
一次并创建基于散列的查找。另一方面,它具有更高的内存占用。当然,这一切都有些懒散 - 只有当你要求第一个结果发生任何重大事件时才会这样做。
有关Join
操作的详细信息,请参阅我的Edulinq blog post on the topic。