IQueryable繼承於IEnumerable緩存
IEnumerable:IEnumerable<T> 泛型類在調用本身的SKip 和 Take 等一些擴展方法以前數據就已經加載在本地內存裏了,全部對於IEnumerable的過濾,排序等操做,都是在內存中發生的。服務器
IQueryable:IQueryable<T> 是將這些方法表達式翻譯成T-SQL後再向SQL服務器發送命令,它並非把全部數據都加載到內存裏來才進行條件過濾,IQueryable的優點是它有表達式樹,全部對於IQueryable的過濾,排序等操做,都會先緩存到表達式樹中,只有當真正遍歷發生的時候,纔會將表達式樹由IQueryProvider執行獲取數據操做(解析表達式,而後執行取得結果)。ide
一般在數據訪問層使用IQueryable,由於能夠把數據的加載延遲到業務邏輯層,不少時候,業務邏輯層不須要立刻加載數據,業務邏輯層依舊能夠使用延遲加載,等真正加載數據須要的時候,能夠在業務邏輯層轉換成IEnumerablespa