linq - 为什么我们不能对 IQueryable<T> 类型的序列调用标准查询运算符?

标签 linq

标准查询运算符在 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/

相关文章:

c# - 合并多个列表

c# - 从电子邮件列表中获取唯一域的列表

c# - 使用linq将KeyValuePair List的键获取到int []数组

c# - 从列表中删除不常见的项目

c# - 比较字符串数组的最佳方法(自定义命令行命令)

c# LINQ-to-XML 在排序后更新(保存)文件中的元素列表

linq - AutoMapper ProjectTo 因 FirstOrDefault 失败

c# - Linq更新数据库,主键

c# - 使用 LINQ 比较列表并返回常见对象

c# - 按总数分组