12

我想知道这两个 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 的上下文中

4

1 回答 1

15

好的,在 LINQ to Objects 中,差异可能非常显着。

第一种形式检查每个 cp对,检查c.cid是否相等p.pid并产生匹配。

第二种形式(在 内Join)首先创建从匹配元素pid到匹配Product元素的基于散列的查找。然后它流式传输categories,然后根据 . 检查查找中存在匹配Product元素的每个类别c.cid。这通常效率更高,因为它只需要查看products一次并创建基于哈希的查找。另一方面,它具有更高的内存占用。当然,这一切都有些懒惰——只有当你要求第一个结果时,才会发生任何重要的事情。

有关Join操作的更多详细信息,请参阅我关于该主题的 Edulinq 博客文章

于 2013-06-25T07:26:09.940 回答