如果IQueryable具有IEnumerable的所有功能,但允许其他功能,为什么甚至使用IEnumerable?
IEnumerable比IQueryable有什么好处?
在这里阅读所有内容,仍然无法找到好处:
答案 0 :(得分:1)
注意2点
IEnumerable<>
只定义了一个GetEnumerator()
方法,这意味着在.NET程序中立即枚举(执行查询)。并且IQueryable<>
有表达式和查询提供程序,这意味着IQueryable<>
只是IEnumerable<>
的一个准备工作,必须通过调用GetEnumerator()
作为普通IEnumerable<>
来执行。完成外部查询后,将查询和结果返回给.NET程序)
IEnumerable
的{{1}} LINQ扩展方法接受Func<>
(委托)参数,这些参数意味着在当前.NET程序中执行C#函数,但IQueryable
需要Expression<Func<>>
表示这些选择器或谓词的参数被密封为表达式,可能(实际上确实)被转换为外部命令,如SQL查询,不会被编译和执行为普通的C#代码。
许多IQueryable<>
查询提供程序为其指定的操作扩展了其他查询函数。使用哪个取决于实际的查询目标。
结论,IEnumerable<>
和IQueryable<>
有不同的用法,IEnumerable<>
用于内部对象查询,IQueryable<>
用于外部资源查询