【发布时间】:2012-02-28 12:09:34
【问题描述】:
在 .Net 4.0 上的 C# 上下文中,是否有任何实现 IQueryable<T> 的内置对象?
【问题讨论】:
标签: linq c#-4.0 types interface iqueryable
在 .Net 4.0 上的 C# 上下文中,是否有任何实现 IQueryable<T> 的内置对象?
【问题讨论】:
标签: linq c#-4.0 types interface iqueryable
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() 扩展方法时对象的不同之处。
EntityCollection 和EnumerableQuery 一样。
并不是说我认为这些中的任何一个都会让你到达任何地方。为了提供帮助,我们需要知道您真正想要解决的问题。如果您正在编写 LINQ 提供程序,您应该阅读以下内容:http://msdn.microsoft.com/en-us/library/bb546158.aspx。
他们建议编写您自己的实现。
【讨论】:
DbQuery<T>,DbSet<T> 等可以,但我不确定什么是可公开实例化的。
嗯,你的问题有点奇怪......但我相信如果你查看Reflector 中的接口,它会给你一个加载程序集中的实现者列表。 p>
作为免责声明,我没有使用 Reflector,因为它是付费游戏,所以我可能错了。
【讨论】: