2011-06-07 53 views
21

IEnumerable<T>。據我所知,引用總是指向一個類實例。 LINQ查詢真正指向哪種實例類型?LINQ查詢的返回類型是什麼?

+1

爲什麼要關閉這個問題?它教授良好的編程習慣(通過展示你不能依賴的東西:實現) – helios 2011-06-07 08:39:34

+3

這取決於LINQ查詢的內容。 – 2011-06-07 08:39:52

+0

我想說,我們需要這個問題背後的動機能夠充分回答它。 – AakashM 2011-06-07 14:27:51

回答

3

我不知道,但我想這是一個內部類型。你不必考慮班級。

事實上,根據具體查詢它可能是不同的類。編譯器可以根據條件/處理將LINQ表達式轉換爲一個或另一個實現。

0

如果我沒有記錯的話,IEnumerable<T>,其中T取決於您的查詢

+2

我想他想知道具體的類,而不是界面。當然這是不相關的(對於每個具體查詢它可能不同) – helios 2011-06-07 08:41:03

10

根據您的原始數據源上,則可能是的IEnumerable或IQueryable的:

一個LINQ數據庫查詢的結果通常是IQueryable<T>它來自IEnumerable < T>,IQueryable和IEnumerable。

如果你的數據庫查詢包含排序依據條款,類型是IOrderedQueryable<T>,從IQueryable的<衍生而來T>

如果您的數據源是一個IEnumerable,結果類型爲IEnumerable<T>

+0

我認爲他的意思是*實際*類,而不是接口。 – 2011-06-07 08:51:08

+0

任何理由投下所有其他答案? – devio 2011-06-07 08:55:18

+0

我只是想知道同樣的事情。我想對於一個問題,只能有一個正確的答案(在他的腦海中),這個問題實際上可以有多個答案,這取決於你如何解釋它。順便說一句,我最喜歡你的答案!讓我們看看OP的想法。 – Maverik 2011-06-07 08:59:05

14

你可以找到它通過在你的IEnumerable<T>變量上調用.GetType()並檢查調試器中的類型。

對於不同的LINQ提供者,甚至不同的LINQ方法,這些類型可能會也可能不會不同。

有什麼事情對你的代碼是,它們都實現IEnumerable<T>你應該一起工作,或IQueryable<T>這也接受表達,這意味着你的斷言和預測將成爲語法樹,並可以通過LINQ提供程序在運行時進行操作,例如被翻譯成SQL。

實際的類,如果這是你所問的,甚至可能是由編譯器生成的,例如,表達式被翻譯成這樣的類。
無論哪種方式,他們通常是內部的,你永遠不應該,有史以來取決於他們

0

您可以檢查here三個部分的查詢操作。您可以看到,一個LINQ查詢的返回類型是IEnumerable < int>。