为什么更喜欢在 IQueryable 上使用 linq 而不是 IEnumerable 上的 linq?
我知道我可以在实现 IQueryable 或 IEnumerable 的集合上使用 linq 语法。
IQueryable 是否使用惰性计算和优化,而 IEnumerable 则不使用?
优化是否包括查询的重新排序?
I know I can use linq syntax on collections that implement IQueryable or IEnumerable.
Does IQueryable use lazy calaulation and optimization, while IEnumerable not?
Does optimization include reordering of the queries?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
IEnumerable
上的 Linq 使用 Linq to Objects -IQueryable
上的 Linq 使用查询提供程序为标准查询运算符实现的任何内容。对于像 Linq to SQL 和实体框架这样的 ORM,即意味着将 Linq 查询转换为数据库上相应的 SQL 查询 - 数据库上的过滤等比将所有数据移动到内存中更可取,因为它将具有更好的性能。
Linq on an
IEnumerable
is using Linq to Objects - Linq on anIQueryable
is using whatever the query provider has implemented for the standard query operators.For ORMs like Linq to SQL and Entity Framework i.e. that means translating your Linq query into the corresponding SQL query on the database - filtering etc. on the database is much preferred to moving all that data into memory as it will have much better performance.
不,IQueryable 通常由面向数据库的提供程序支持,并支持转换为 SQL。
任何优化都将归因于 SQL 引擎。
IQueryable 和 IEnumerable 都具有延迟执行。
接口 IQueryable:IEnumerable...
No, IQueryable is typically supported by database-oriented providers and supports translation to SQL.
Any optimizations would be due to the SQL engine.
Both IQueryable and IEnumerable have deferred execution.
interface IQueryable<T> : IEnumerable<T> ...