2013-06-25 30 views
12

我想知道這兩個linq語句之間有什麼區別?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 }; 

在此先感謝你們。

編輯:在到對象

+2

在LINQ to Objects,LINQ to SQL/EF或其他方面的情況下? –

+0

LINQ到對象 –

+0

順便說一下,我認爲你的意思是在第二個查詢中使用'p.pid'。 –

回答

14

好LINQ的上下文中,內LINQ到對象的差異可以是非常顯着的。

第一種形式檢查cp對,檢查c.cid等於p.pid併產生匹配。

第二種形式(在Join之內)首先創建一個從pid到匹配Product元素的基於散列的查找。然後它將流傳輸categories,然後根據c.cid檢查查找中匹配Product元素的每個類別。這通常效率更高,因爲它只需要查看一次products並創建基於散列的查找。另一方面,它具有更高的內存佔用。當然,這一切都有點懶惰 - 只有當你要求第一個結果時纔會發生重大事件。

有關Join操作的更多詳細信息,請參閱我的Edulinq blog post on the topic

+0

好吧,我明白了。謝謝Jon Skeet。 –