EntitySet <t>的“结果视图”在哪里?</t>

时间:2010-12-20 13:51:19

标签: c# linq-to-sql iqueryable entityset debuggervisualizer

查看LINQ to SQL映射实体的链接EntitySet<T>时,我看到以下内容:

EntitySet debug view

我希望看到以下内容(通过使用.AsQueryable()扩展方法实现),以便我可以点击小刷新图标并查看内容:

alt text

为什么我无法在常规普通EntitySet<T>上看到结果视图?

另外,我注意到它在this MSDN page上说:

  

在LINQ to SQL中,EntitySet<TEntity>类实现IQueryable接口。

从我看到的情况来看,EntitySet<TEntity>不会继承IQueryableIQueryable<T>。那么这个主张怎么了?

2 个答案:

答案 0 :(得分:3)

您将找到此question

的答案
  

结果视图仅适用于   满足以下要求的藏品   条件

     
      
  1. 实现IEnumerable或IEnumerable(VB.Net仅适用于   IEnumerable的)
  2.   
  3. 执行IList,IList,ICollection或   ICollection(仅限C#限制)
  4.   
  5. 具有DebuggerTypeProxy属性
  6.   
  7. 在debugee进程中加载​​了System.Core.dll
  8.   

特别是#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派生,这是有道理的 - 因为枚举器不按顺序返回集合,而是引用集合中的各个成员。