65.9K
CodeProject 正在变化。 阅读更多。
Home

IEnumerable 与 IQueryable

2014 年 2 月 24 日

CPOL

1分钟阅读

viewsIcon

265263

IEnumerable 与 IQueryable

许多开发者容易混淆 IEnumerableIQueryable。在编写代码时,它们看起来非常相似。然而,它们之间存在许多差异,在编写代码时需要注意。两者都有一些预期的使用场景,为此它们才被创建。

以下是基于其属性的它们之间的差异

  IEnumerable IQueryable
命名空间 System.Collections 命名空间 System.Linq 命名空间
继承自 没有基础接口 继承自 IEnumerable
延迟执行 支持 支持
懒加载 不支持 支持
它是如何工作的 在从数据库查询数据时,IEnumerable 在服务器端执行 select 查询,将数据加载到客户端内存中,然后过滤数据。因此,它执行更多的工作,速度较慢。 在从数据库查询数据时,IQueryable 在服务器端执行 select 查询,并应用所有过滤器。因此,它执行更少的工作,速度更快。
适用场景 LINQ to Object 和 LINQ to XML 查询 LINQ to SQL 查询
自定义查询 不支持 支持使用 CreateQueryExecute 方法
扩展方法
参数
IEnumerable 中支持的扩展方法接收函数对象。 IQueryable 中支持的扩展方法接收表达式对象,即表达式树。
何时使用 在查询来自内存集合(如 ListArray 等)的数据时。 在查询来自内存之外的数据(如远程数据库、服务)集合时。
最佳用途 内存遍历 分页

© . All rights reserved.