MVC Core IEnumerable 相对于 IQueryable 的优势

MVC Core IEnumerable Advantages over IQueryable

如果 IQueryable 具有 IEnumerable 的所有功能,但允许附加功能,为什么还要使用 IEnumerable?

与 IQueryable 相比,IEnumerable 有哪些优势?

看完了,还是没找到收获:

IQueryable 和 IEnumerable 有什么区别?

IEnumerable Vs IQueryable

注意2点

  1. IEnumerable<>只定义了1个方法GetEnumerator(),意思是在.NET程序中立即枚举(执行查询)。 IQueryable<> 有表达式和查询提供者,这意味着 IQueryable<> 只是 IEnumerable<> 的准备,它必须通过调用 GetEnumerator() 作为正常的 IEnumerable<> 来执行(手完成外部查询时将查询和结果返回给 .NET 程序)

  2. IEnumerable 的 LINQ 扩展方法采用 Func<>(委托)参数,这意味着要在当前 .NET 程序中执行的 C# 函数,但 IQueryable 采用Expression<Func<>> 参数意味着这些选择器或预测器被密封为表达式,可能(实际上确实)被翻译成外部命令,例如 SQL 查询,不会像普通 C# 代码一样被编译和执行。

  3. 许多 IQueryable<> 查询提供程序为其指定的操作扩展了额外的查询功能。使用哪个取决于实际查询目标。

结论,IEnumerable<>IQueryable<>用法不同,IEnumerable<>用于内部对象查询,IQueryable<>用于外部资源查询