查看LINQ to SQL映射实体的链接EntitySet<T>
时,我看到以下内容:
我希望看到以下内容(通过使用.AsQueryable()
扩展方法实现),以便我可以点击小刷新图标并查看内容:
为什么我无法在常规普通EntitySet<T>
上看到结果视图?
另外,我注意到它在this MSDN page上说:
在LINQ to SQL中,
EntitySet<TEntity>
类实现IQueryable
接口。
从我看到的情况来看,EntitySet<TEntity>
不会继承IQueryable
或IQueryable<T>
。那么这个主张怎么了?
答案 0 :(得分:3)
您将找到此question
的答案结果视图仅适用于 满足以下要求的藏品 条件
- 实现IEnumerable或IEnumerable(VB.Net仅适用于 IEnumerable的)
- 不执行IList,IList,ICollection或 ICollection(仅限C#限制)
- 不具有DebuggerTypeProxy属性
- 在debugee进程中加载了System.Core.dll
醇>
特别是#2,EntitySet&lt; T&gt;实现IList&lt; T&gt;因此调试器不会显示“结果视图”选项。
使用AsQueryable扩展方法返回一个只实现IQueryable和IEnumerable的对象,因此将显示“Results View”选项。
您可以在另一个问题的答案中阅读有关#2的更多信息。
答案 1 :(得分:0)
您引用的页面上的术语可能有点偏离 - 因为EntitySet和IQueryable都是从IEnumerable派生的,如果EntitySet直接实现了IQueryable,那么实现IEnumerable将是多余的。
AsQueryable()所做的是将EntitySet转换为EnumerableQuery(如第二张图片所示) - 只有在转换完成后才能看到结果视图。
由于EntitySet仅从IEnumerable派生,这是有道理的 - 因为枚举器不按顺序返回集合,而是引用集合中的各个成员。