IQueryable和IEnumerable的比較,我是這麼理解的,IQ是數據庫查詢,IE是內存查詢
IQ速度快,IE速度慢,IQ不能調用自定義方法,IE可以,所以IE通用性強。
如果能用IQ就不用IE,是不是這樣?
IQueryable基於表達式樹,C#遇到調用它的地方,不會直接編譯這些調用代碼,而是會產生一個Expression對象,用類似抽象語法樹的數據結構表示查詢表達式。
這樣LINQ Provider就可以在運行的時候知道你的表達式中的過濾條件,從而實現查詢。正因為如此,自定義方法對於LINQ to SQL來說是不可用的。
但是完全你可以寫一個Provider,不是針對數據庫查詢的,以及支持本地方法調用。同時IQueryable查詢結果,也必須轉化為IEnumerable才能迭代出結果。
所以你說的不准確。