IQueryable 与 IEnumberable 接口的区别是:
IEnumberable<T> 泛型类在调用自己的 SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,
而 IQueryable<T> 是将 SKip、Take 这些方法表达式翻译成 T-SQL 语句之后再向 SQL 服务器发送命令,也就是延迟在要真正显示数据的时候才执行。
(IQueryable 其实继承了 IEnumberable)
那么我们什么时候使用 IQueryable、什么时候使用 IEnumberable 呢?
通常,在数据访问层都是使用 IQueryable,因为可以把对数据的加载延时到业务逻辑层来处理。很多时候,业务逻辑层调用数据访问层的方法时并不要求马上从数据库中加载数据保存在内存中。
这时在业务逻辑层依旧可以使用延时加载,当真正需要加载数据的时候,再在业务逻辑层把 IQueryable 转换成 IEnumberable,把数据加载进来。