我知道我可以在实现IQueryable或IEnumerable的集合上使用linq语法。
IQueryable是否使用延迟计算和优化,而IEnumerable不是?
优化是否包括重新排序查询?
答案 0 :(得分:9)
IEnumerable
上的Linq正在使用Linq到对象 - IQueryable
上的Linq正在使用查询提供程序为标准查询运算符实现的任何内容。
对于像Linq to SQL和Entity Framework这样的ORM,即这意味着将你的Linq查询转换为数据库上相应的SQL查询 - 对数据库进行过滤等比将所有数据移动到内存中要好得多,因为它会更好性能
答案 1 :(得分:3)
不,IQueryable通常由面向数据库的提供程序支持,并支持转换为SQL 任何优化都归功于SQL引擎。
IQueryable和IEnumerable都延迟执行
interface IQueryable<T> : IEnumerable<T> ...