.Net 4.0 中都有哪些实现 IQueryable<T> 的可实例化类型?

Posted

技术标签:

【中文标题】.Net 4.0 中都有哪些实现 IQueryable<T> 的可实例化类型?【英文标题】:What instantiate-able types implementing IQueryable<T> are available in .Net 4.0?.Net 4.0 中有哪些实现 IQueryable<T> 的可实例化类型? 【发布时间】:2012-02-28 12:09:34 【问题描述】:

在 .Net 4.0 上的 C# 上下文中,是否有任何实现 IQueryable&lt;T&gt; 的内置对象?

【问题讨论】:

【参考方案1】:

IQueryable 对象由可查询提供程序(例如 LINQ to SQL、LINQ to Entities/Entity Framework 等)生成。在基本的 .NET Framework 中,您几乎无法使用 new 实例化任何东西来实现 IQueryable。

IQueryable 是一个设计用于创建可查询提供程序的接口,它允许通过构建可解析的表达式树来针对外部数据存储利用 LINQ 库。从本质上讲,Queryables 需要一个上下文 - 关于您正在查询的确切内容的信息。使用 new 创建任何 IQueryable 类型,无论是否可能,都不会让您走得太远。

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

【讨论】:

谢谢。您描述的场景(单元测试)几乎就是我正在做的事情。你知道关于你提到的构造差异的任何好的文档吗?我很想了解更多关于使用 AsQueryable() 扩展方法时对象的不同之处。 这是非常不同的。 IQueryable 方法将节点添加到表达式树,而不是由 IEnumerable Linq 方法生成的 Iterator 对象链。这棵树本身并不能像迭代器那样作为代码执行。但是,它是可序列化的、可解析的等,因此您可以确定查询的结构并将其转换为另一种语言(如 SQL)的查询。 看看这个问题和所有相关链接:***.com/questions/252785/… 我认为你帮助我在这里学到了两件事 - ***.com/questions/9010384/…。当使用“linq to objects”时,我正在使用一系列迭代器,而使用 L2Sql 或 L2E 是表达式树最终转换为 SQL 或可查询提供者知道的其他查询语言?我理解得体吗? 是的,你有基本的概念。继续阅读;两者之间存在重要差异,但基本要点是,虽然两者都允许对您构建的任何构造进行“惰性”评估,但 IEnumerable Linq 用于处理普通的内存对象集合,而 IQueryable Linq 用于交谈到“内存不足”的数据源。【参考方案2】:

EntityCollection 和EnumerableQuery 一样。

并不是说我认为这些中的任何一个都会让你到达任何地方。为了提供帮助,我们需要知道您真正想要解决的问题。如果您正在编写 LINQ 提供程序,您应该阅读以下内容:http://msdn.microsoft.com/en-us/library/bb546158.aspx。

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

【讨论】:

谢谢。很抱歉在最初的帖子中造成混乱;我不是在寻找代码方面的帮助,只是学习新的 C# 对象来玩。 @AndreyTch,EntityCollection 没有。DbQuery&lt;T&gt;DbSet&lt;T&gt; 等可以,但我不确定什么是可公开实例化的。【参考方案3】:

嗯,你的问题有点奇怪......但我相信如果你查看Reflector 中的接口,它会给你一个加载程序集中的实现者列表。 p>

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

【讨论】:

以上是关于.Net 4.0 中都有哪些实现 IQueryable<T> 的可实例化类型?的主要内容,如果未能解决你的问题,请参考以下文章

commons.lang中都有哪些常用的工具

常用的数据可视化软件都有哪些

机器学习中都有哪些重要的优化算法?

ORACLE中都有哪些数据类型

idea显示类中都有哪些方法快捷键

python中都有哪些简单的算法?