建議2九、區別LINQ查詢中的IEnumerable<T>和IQueryable<T>html
LINQ查詢方法一共提供了兩類擴展方法,在System.Linq命名空間下,有兩個靜態類:數據庫
Enumerable類,它針對繼承了IEnumerable<T>接口的集合類進行擴展。設計
Queryable類,它針對繼承了IQueryable<T>接口的集合類進行擴展。htm
稍加觀察咱們會發現,接口IQueryable<T>實際也是繼承了IEnumerable<T>接口的,因此導致這兩個接口額方法在很大成都上是一致的。簡單的來表述就是:本地數據源用IEnumerable<T>,遠程數據源用IQueryable<T>。blog
LINQ查詢從功能上來說實際上能夠分爲三類:LINQ to OBJECTS、LINQ to SQL、LINQ to XML。設計Enumerable<T>和Queryable<T>兩套接口的緣由是爲了區別對待LINQ to OBJECTS、LINQ to SQL,二者對於查詢的處理在內部使用的是徹底不一樣的機制。針對LINQ to OBJECTS時,使用Enumerable中的擴展方法對本地集合進行排序和查詢等操做,查詢參數接受的是Func<>。Func<>叫作謂語表達式,至關於一個委託。針對LINQ to SQL時,則使用Queryable中的擴展方法,它接受的參數是Expression<>。Expression<>用於包裝Func<>。LINQ to SQL引擎最終會將表達式樹轉化成爲相應的SQL語句,而後在數據庫中執行。排序
(建議2九、區別LINQ查詢中的IEnumerable<T>和IQueryable<T> http://www.cnblogs.com/aehyok/p/3712725.html)繼承