IQueryable<;T>;仅从Linq to Sql或Linq to Entities类返回?

IQueryable<;T>;仅从Linq to Sql或Linq to Entities类返回?,linq,linq-to-sql,linq-to-entities,Linq,Linq To Sql,Linq To Entities,在我正在阅读的《C#2010中的Pro Linq》(APress、Freeman和Ratz)一书中,作者指出IQueryable将仅从Linq to Sql命名空间中的类返回,而不是从常规Linq命名空间中返回。我对此感到惊讶,因为我认为任何有最终目的的东西都必须是可以实现的。原来我错了,IEnumerable的扩展在哪里。由于IQueryable:IEnumerable,您可以在其中任何一个上添加where子句 作者是对的吗 我说的是框架类,不是任何最终用户生成的代码 作者错了。任何类都可以有

在我正在阅读的《C#2010中的Pro Linq》(APress、Freeman和Ratz)一书中,作者指出IQueryable将仅从Linq to Sql命名空间中的类返回,而不是从常规Linq命名空间中返回。我对此感到惊讶,因为我认为任何有最终目的的东西都必须是可以实现的。原来我错了,IEnumerable的扩展在哪里。由于
IQueryable:IEnumerable
,您可以在其中任何一个上添加where子句

作者是对的吗


我说的是框架类,不是任何最终用户生成的代码

作者错了。任何类都可以有一个返回
IQueryable
的方法


事实上,您确定作者遗漏了LINQ到实体吗?LINQtoSQL并不是很不受欢迎,但LINQtoEntities是微软花费时间和金钱的地方,而不是LINQtoSQL。

作者错了。任何类都可以有一个返回
IQueryable
的方法


事实上,您确定作者遗漏了LINQ到实体吗?LINQ to SQL并不是很受欢迎,但LINQ to Entities是Microsoft花费时间和金钱的地方,而不是LINQ to SQL。

LINQ有两套扩展方法-一套包含在类中,另一套包含在类中

Enumerable
用于处理
IEnumerable
并使用委托作为参数的LINQ to对象
Queryable
用于需要检查和处理查询的LINQ提供程序,如实体框架或LINQ to SQL,因此使用
IQueryable
而不是
IEnumerable

对于上述两个O/R映射器,它们必须将查询转换为SQL查询。这不适用于委托(除非有人分析IL代码或做其他疯狂的事情),因此
Queryable
中的扩展方法将用作参数而不是委托


除了上述两种O/R映射程序(以前的ADO.NET数据服务)之外,还使用
IQueryable
()并将表达式树形式的查询转换为URL。

LINQ有两组扩展方法-一组包含在类中,另一组包含在类中

Enumerable
用于处理
IEnumerable
并使用委托作为参数的LINQ to对象
Queryable
用于需要检查和处理查询的LINQ提供程序,如实体框架或LINQ to SQL,因此使用
IQueryable
而不是
IEnumerable

对于上述两个O/R映射器,它们必须将查询转换为SQL查询。这不适用于委托(除非有人分析IL代码或做其他疯狂的事情),因此
Queryable
中的扩展方法将用作参数而不是委托


除了上面提到的两个O/R映射器(以前的ADO.NET数据服务)还使用
IQueryable
(),并将查询以表达式树的形式转换为URL。

OP确实提到了其他使用IQueryable的框架类,而不是用户生成的类。@Justin:在这种情况下,作者错了。哪个框架类返回这种类型?最有可能的情况是仅生成代码。通常,
IQueryable
与生成的代码一起使用,但此生成的代码通常也只是包装或聚合框架类,如
ObjectContext
ObjectSet
,或者
DataServiceQuery
实现或公开
IQueryable
。OP确实提到了其他使用IQueryable的框架类,而不是用户生成的类。@Justin:在这种情况下,作者错了。哪个框架类返回这种类型?最有可能的情况是仅生成代码。通常,
IQueryable
与生成的代码一起使用,但此生成的代码通常也只是包装或聚合框架类,如
ObjectContext
ObjectSet
DataServiceQuery
实现或公开
IQueryable