IQueryable继承于IEnumerable缓存
IEnumerable:IEnumerable<T> 泛型类在调用本身的SKip 和 Take 等一些扩展方法以前数据就已经加载在本地内存里了,全部对于IEnumerable的过滤,排序等操做,都是在内存中发生的。服务器
IQueryable:IQueryable<T> 是将这些方法表达式翻译成T-SQL后再向SQL服务器发送命令,它并非把全部数据都加载到内存里来才进行条件过滤,IQueryable的优点是它有表达式树,全部对于IQueryable的过滤,排序等操做,都会先缓存到表达式树中,只有当真正遍历发生的时候,才会将表达式树由IQueryProvider执行获取数据操做(解析表达式,而后执行取得结果)。ide
一般在数据访问层使用IQueryable,由于能够把数据的加载延迟到业务逻辑层,不少时候,业务逻辑层不须要立刻加载数据,业务逻辑层依旧能够使用延迟加载,等真正加载数据须要的时候,能够在业务逻辑层转换成IEnumerablespa