关于linq:实现IQueryable< T>的实例化类型是什么

What instantiate-able types implementing IQueryable<T> are available in .Net 4.0?

在.NET 4.0的C_on环境中,是否有实现IQueryable的内置对象?


IQueryable对象由可查询的提供程序(如linq to sql、linq to entities/entity framework等)生成。实际上,在基本的.NET框架中,没有任何东西可以用new进行实例化来实现iQuery。

IQueryable是一个设计用于创建可查询提供者的接口,它允许通过构建可解析表达式树,在外部数据存储中利用LINQ库。从本质上讲,查询表需要一个上下文——关于您所查询内容的信息。使用new创建任何iqueryable类型,不管它是否可能,都不会让您走得很远。

也就是说,任何IEnumerable都可以使用AsQueryable()扩展方法转换成IQueryable。这在后台创建了一个表面上相似但功能上非常不同的构造,就像对一个普通的IEnumerable对象使用linq方法一样。这可能是您在不设置实际的IQueryable提供程序的情况下可以访问的最丰富的查询源。这种转换对于单元测试基于LINQ的算法非常有用,因为您不需要实际的数据存储,只需要一个可以模拟它的内存数据列表。


EntityCollection和EnumerableQuery一样。

我想这两个都不会让你有任何收获。为了提供帮助,我们需要知道您真正想要解决的是什么。如果要编写LINQ提供程序,请阅读以下内容:http://msdn.microsoft.com/en-us/library/bb546158.aspx。

他们建议编写自己的实现。


你的问题有点奇怪…但我相信,如果您查看Reflector中的接口,它将为您提供加载的程序集中的实现者列表。

作为免责声明,我没有使用Reflector,因为它是付费的,所以我可能错了。