EntitySet 的“结果视图”在哪里?
查看LINQ to SQL映射实体的链接EntitySet
时,我看到以下内容:
我想看到以下内容(通过使用.AsQueryable()
扩展方法实现),以便我可以单击小刷新图标并查看内容:
为什么我不能在常规的纯EntitySet
上看到结果视图?
另外,我注意到在这个MSDN页面上它说:
在LINQ to SQL中,
EntitySet
类实现IQueryable
接口。
从我所看到的, EntitySet
不inheritanceIQueryable
和IQueryable
。 那么这个主张怎么了?
你会找到这个问题的答案
结果视图仅适用于满足以下条件的集合
- 实现IEnumerable或IEnumerable(VB.Net仅适用于IEnumerable)
- 不要实现IList,IList,ICollection或ICollection(仅限C#限制)
- 没有 DebuggerTypeProxy属性
- 在debugee进程中加载System.Core.dll
特别是#2,EntitySet
使用AsQueryable扩展方法返回一个只实现IQueryable和IEnumerable的对象,因此将显示“Results View”选项。
您可以在另一个问题的答案中阅读有关#2的更多信息。
您引用的页面上的术语可能有点偏离 – 因为EntitySet和IQueryable都来自IEnumerable,如果EntitySet直接实现了IQueryable,那么实现IEnumerable将是多余的。
AsQueryable()所做的是将EntitySet转换为EnumerableQuery(如第二张图片所示) – 只有在转换完成后才能看到结果视图。
由于EntitySet仅从IEnumerable派生,因此这是有意义的 – 因为枚举器不按顺序返回集合,而是引用集合中的各个成员。