理解.NET中的IEnumerable 和 IQueryable
在应用到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. |
Extension mehtod parameter | Extension methods supported | Extension methods in IEnumerable takes functional objects. |
使用场合 | 当从内存中的数据集合(如LIst,Array etc)查询数据的时候 | 当查询非内存中的数据集合(如远程数据库,service等)时。 |
最常使用 | 内存遍历 | Paging |