2010-12-14 48 views
-2

LINQ中的IEnumerable和IQuearable有什麼區別?我閱讀了更多關於這方面的文章,但我不理解實際情況。asp.net中的LINQ

+6

事實上,**接受一些答案** - 直到你的.. [IQueryable的和IEnumerable 之間的區別是什麼?(HTTP – 2010-12-14 09:44:32

+0

可能重複,我會刪除我的答案://計算器.com/questions/252785/what-is-the-difference-between-iqueryablet-and-ienumerablet) – 2011-01-16 18:42:48

+0

People!這個問題不可能是不可思議的。盡職盡責。 – 2011-01-16 18:44:22

回答

0

IEnumerable和IQueryable是任何LINQ討論中最常用的兩個術語。我想在這裏試圖根據他們的行爲來簡化兩個接口。在LINQ世界中,我們通常在.NET Framework中有很少的提供者可用,比如LINQ to Object,LINQ to SQL,LINQ to XML。

這是一條聲明,每個LINQ語句都返回IEnumerable。 IEnumerable按步驟工作。意思是,當你寫,

var q = from a in b 

      where a > 5 

      select a; 

它創建了一個清單出來「B」因「其中」然後創建另一個列表「選擇」。這是LINQ to Object和LINQ to XML的行爲。

當您使用LINQ to SQL時,它使用IQueryable。該接口繼承自IEnumerable,但通常任何LINQ to SQL都會在後端生成T-SQL,以便能夠爲我們獲取數據。這一次評估並生成查詢,併爲我們提供了整個數據。

What is the difference between IQueryable<T> and IEnumerable<T>?

0

的IEnumerable意味着我可以返回T.

的項目

的IQueryable意味着我可以返回的T項目,但我還可以接受LINQ操作(其中,選擇等),我會處理並轉換爲無論是在幕後提供數據。

現在當然IEnumerable看起來像它也接受LINQ操作,但不同之處在於它們從來沒有被翻譯過,而是隻是在內存中執行。例如Where運算符只是做這樣的事情:

T式(IEnumerable的值,Func鍵謂語) { 的foreach(中值VAR值) 如果(謂詞(值)) 產量的返回值; }