IEnumberable和IQueryable这两个接口经常给在Linq和Lambda中使用,具体使用场景如下所示:
项目 | IEnumerable | IQueryable |
---|---|---|
命名空间 | System.Collections Namespace | System.Linq Namespace |
继承于 | No base interface | 继承于IEnumerable |
Deferred Execution | 支持 | 支持 |
延迟加载 | 不支持 | 支持 |
工作流程 | 把查询的数据加载在内存中,然后再筛选数据,因此这个操作比较占用内存,运行慢 | 当从数据库中查询数据,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等) | 当查询非内存中的数据集合(如远程数据库,service等) |