C# IEnumberable & IQueryable 区别
转自 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 |

浙公网安备 33010602011771号