MVC Core IEnumerable 相对于 IQueryable 的优势
MVC Core IEnumerable Advantages over IQueryable
如果 IQueryable 具有 IEnumerable 的所有功能,但允许附加功能,为什么还要使用 IEnumerable?
与 IQueryable 相比,IEnumerable 有哪些优势?
看完了,还是没找到收获:
注意2点
IEnumerable<>
只定义了1个方法GetEnumerator()
,意思是在.NET程序中立即枚举(执行查询)。 IQueryable<>
有表达式和查询提供者,这意味着 IQueryable<>
只是 IEnumerable<>
的准备,它必须通过调用 GetEnumerator()
作为正常的 IEnumerable<>
来执行(手完成外部查询时将查询和结果返回给 .NET 程序)
IEnumerable
的 LINQ 扩展方法采用 Func<>
(委托)参数,这意味着要在当前 .NET 程序中执行的 C# 函数,但 IQueryable
采用Expression<Func<>>
参数意味着这些选择器或预测器被密封为表达式,可能(实际上确实)被翻译成外部命令,例如 SQL 查询,不会像普通 C# 代码一样被编译和执行。
许多 IQueryable<>
查询提供程序为其指定的操作扩展了额外的查询功能。使用哪个取决于实际查询目标。
结论,IEnumerable<>
和IQueryable<>
用法不同,IEnumerable<>
用于内部对象查询,IQueryable<>
用于外部资源查询
如果 IQueryable 具有 IEnumerable 的所有功能,但允许附加功能,为什么还要使用 IEnumerable?
与 IQueryable 相比,IEnumerable 有哪些优势?
看完了,还是没找到收获:
注意2点
IEnumerable<>
只定义了1个方法GetEnumerator()
,意思是在.NET程序中立即枚举(执行查询)。IQueryable<>
有表达式和查询提供者,这意味着IQueryable<>
只是IEnumerable<>
的准备,它必须通过调用GetEnumerator()
作为正常的IEnumerable<>
来执行(手完成外部查询时将查询和结果返回给 .NET 程序)IEnumerable
的 LINQ 扩展方法采用Func<>
(委托)参数,这意味着要在当前 .NET 程序中执行的 C# 函数,但IQueryable
采用Expression<Func<>>
参数意味着这些选择器或预测器被密封为表达式,可能(实际上确实)被翻译成外部命令,例如 SQL 查询,不会像普通 C# 代码一样被编译和执行。许多
IQueryable<>
查询提供程序为其指定的操作扩展了额外的查询功能。使用哪个取决于实际查询目标。
结论,IEnumerable<>
和IQueryable<>
用法不同,IEnumerable<>
用于内部对象查询,IQueryable<>
用于外部资源查询