标准查询运算符在 Linq to Object 序列上运行,它实现 IEnumerable<T>
接口(interface),而 Linq to Sql 运算符在 IQueryable<T>
类型的序列上调用界面。因此,无法对 IQueryable<T>
类型的序列调用标准查询运算符。除非此序列首先转换为 IEnumerable<T>
(通过 AsEnumerable
运算符(operator))
a) 为什么不能在 Reverse()
上调用没有 Linq to Sql 对应项的标准查询运算符(如 IQueryable<T>
)顺序?即IQueryable<T>
源自IEnumerable<T>
因此,扩展方法扩展了实现 IEnumerable<T>
的类还应该扩展实现从 IEnumerable<T>
派生的接口(interface)的类?!
b) 无论如何,为什么能够在 IQueryable<T>
类型的序列上调用标准查询运算符(那些没有 Linq to Sql 对应项的运算符)是一个坏主意? ,无需先将此序列转换为 IEnumerable<T>
(通过 AsEnumerable
运算符(operator))?
谢谢
最佳答案
IQueryable<T>
一般来说,不仅仅适用于 Linq to SQL,它是任何查询提供程序都可以选择支持一组有限操作的约定 - 并非所有查询提供程序都支持相同的子集。
支持的子集取决于查询提供程序领域中有意义的内容。 IQueryable<T>
对表达式树进行操作,该表达式树允许查询提供程序将查询转换为底层数据源的域特定语言(即 SQL)。
关于linq - 为什么我们不能对 IQueryable<T> 类型的序列调用标准查询运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735396/