为什么更喜欢在IEnumerable上使用linq on IQueryable over linq?

时间:2011-11-28 21:14:27

标签: c# .net ienumerable iqueryable

我知道我可以在实现IQueryable或IEnumerable的集合上使用linq语法。

IQueryable是否使用延迟计算和优化,而IEnumerable不是?

优化是否包括重新排序查询?

2 个答案:

答案 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> ...