在 Entity Framework 中,什么时候 IEnumerable 优于 IQueryable?
When is IEnumerable preferred over IQueryable in Entity Framework?
我了解 IEnumerable 和 IQueryable 的工作原理。我无法想象在使用 SQL 数据库时 entity framework 中需要 IEnumerable 的情况。我想知道我是否可以在 EF 中丢弃 IEnumerable。您能否提供任何有用的示例来说明 IEnumerable 可能比 IQueryable 更有用?
我想到了三种情况。
- 当 EF 无法将您的查询转换为正确的 SQL 语句时 - 因此您需要将结果存入内存以完成计算。
- 当您需要执行涉及未转换为 SQL 的运算符时。
- 当 SQL 服务器生成计算的速度比内存计算慢。很多时候我发现将所有数据拉入内存比让 SQL 来做更快。
如果可以查询数据源(如 IQueryable
),那么是的,使用 IQueryable
- 尽管您不应该 创建 IQueryable
实例或自己实现它,这就是 EF 的用途。如果您将 EF 与外部数据源或其他本身不可查询的数据一起使用,例如 JOIN
ing,您仍然需要使用 IEnumerable
作为方法参数或 return 类型带有非 EF 数据的 EF table。
例如,如果您正在 return 的数据不可查询,则您将 return 键入 IEnumerable<T>
,因为您调用了 AsEnumerable
或ToList
但您不想透露实施细节 - 但在那种情况下我更喜欢 IReadOnlyList<T>
。
我了解 IEnumerable 和 IQueryable 的工作原理。我无法想象在使用 SQL 数据库时 entity framework 中需要 IEnumerable 的情况。我想知道我是否可以在 EF 中丢弃 IEnumerable。您能否提供任何有用的示例来说明 IEnumerable 可能比 IQueryable 更有用?
我想到了三种情况。
- 当 EF 无法将您的查询转换为正确的 SQL 语句时 - 因此您需要将结果存入内存以完成计算。
- 当您需要执行涉及未转换为 SQL 的运算符时。
- 当 SQL 服务器生成计算的速度比内存计算慢。很多时候我发现将所有数据拉入内存比让 SQL 来做更快。
如果可以查询数据源(如 IQueryable
),那么是的,使用 IQueryable
- 尽管您不应该 创建 IQueryable
实例或自己实现它,这就是 EF 的用途。如果您将 EF 与外部数据源或其他本身不可查询的数据一起使用,例如 JOIN
ing,您仍然需要使用 IEnumerable
作为方法参数或 return 类型带有非 EF 数据的 EF table。
例如,如果您正在 return 的数据不可查询,则您将 return 键入 IEnumerable<T>
,因为您调用了 AsEnumerable
或ToList
但您不想透露实施细节 - 但在那种情况下我更喜欢 IReadOnlyList<T>
。