EntitySet 的“结果视图”在哪里?

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

EntitySet调试视图

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

替代文字

为什么我不能在常规的纯EntitySet上看到结果视图?

另外,我注意到在这个MSDN页面上它说:

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

从我所看到的, EntitySet不inheritanceIQueryableIQueryable 。 那么这个主张怎么了?

你会找到这个问题的答案

结果视图仅适用于满足以下条件的集合

  1. 实现IEnumerable或IEnumerable(VB.Net仅适用于IEnumerable)
  2. 不要实现IList,IList,ICollection或ICollection(仅限C#限制)
  3. 没有 DebuggerTypeProxy属性
  4. 在debugee进程中加载​​System.Core.dll

特别是#2,EntitySet 实现的IList 因此调试器不会显示“结果视图”选项。

使用AsQueryable扩展方法返回一个只实现IQueryable和IEnumerable的对象,因此将显示“Results View”选项。

您可以在另一个问题的答案中阅读有关#2的更多信息。

您引用的页面上的术语可能有点偏离 – 因为EntitySet和IQueryable都来自IEnumerable,如果EntitySet直接实现了IQueryable,那么实现IEnumerable将是多余的。

AsQueryable()所做的是将EntitySet转换为EnumerableQuery(如第二张图片所示) – 只有在转换完成后才能看到结果视图。

由于EntitySet仅从IEnumerable派生,因此这是有意义的 – 因为枚举器不按顺序返回集合,而是引用集合中的各个成员。