在 Entity Framework 中,什么时候 IEnumerable 优于 IQueryable?

When is IEnumerable preferred over IQueryable in Entity Framework?

我了解 IEnumerable 和 IQueryable 的工作原理。我无法想象在使用 SQL 数据库时 entity framework 中需要 IEnumerable 的情况。我想知道我是否可以在 EF 中丢弃 IEnumerable。您能否提供任何有用的示例来说明 IEnumerable 可能比 IQueryable 更有用?

我想到了三种情况。

  1. 当 EF 无法将您的查询转换为正确的 SQL 语句时 - 因此您需要将结果存入内存以完成计算。
  2. 当您需要执行涉及未转换为 SQL 的运算符时。
  3. 当 SQL 服务器生成计算的速度比内存计算慢。很多时候我发现将所有数据拉入内存比让 SQL 来做更快。

如果可以查询数据源(如 IQueryable),那么是的,使用 IQueryable - 尽管您不应该 创建 IQueryable 实例或自己实现它,这就是 EF 的用途。如果您将 EF 与外部数据源或其他本身不可查询的数据一起使用,例如 JOINing,您仍然需要使用 IEnumerable 作为方法参数或 return 类型带有非 EF 数据的 EF table。

例如,如果您正在 return 的数据不可查询,则您将 return 键入 IEnumerable<T>,因为您调用了 AsEnumerableToList 但您不想透露实施细节 - 但在那种情况下我更喜欢 IReadOnlyList<T>