转自 http://blog.csdn.net/daimeisi123/article/details/46976093
在应用到IEnumberable 和IQueryable两个接口时,代码往往很相似,从而造成了很多困惑,然后事实上他们两是有很大的区别的,各种都有自己特定的使用场景。
下面是IEnumberable和IQueryable的属性对比:
IEnumerable | IQueryable | |
Namespace | System.Collections Namespace | System.Linq Namespace |
继承于 | No base interface | 继承于 IEnumerable |
Deferred Execution | 支持 | 支持 |
Lazy Loading | 不支持 | 支持 |
如何工作 | 当从数据库中查询数据,IEnumberable在服务器端执行查询操作,下载数据到客户端的内存中,然后再筛选数据,因此这个操作需要更多的工作而变得缓慢。 | 当从数据库中查询数据,IQueryable在服务器端根据所有的filter条件执行查询操作,因此该操作需要更少的工作而运行快。 |
适用于 | LINQ to Object and LINQ to XML queries. | LINQ to SQL queries. |
自定义查询 | 不支持 | 支持使用CreateQuery 和Execute 方法。 |
Extension mehtod parameter |
Extension methods supported in IEnumerable takes functional objects. |
Extension methods supported in IEnumerable takes expression objects i.e. expression tree. |
使用场合 | 当从内存中的数据集合(如LIst,Array etc)查询数据的时候 | 当查询非内存中的数据集合(如远程数据库,service等)时。 |
最常使用 | 内存遍历 | Paging |