1

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

EntitySet 调试视图

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

替代文字

为什么我在普通的平原上看不到结果视图EntitySet<T>

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

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

据我所见,EntitySet<TEntity>不继承自IQueryableor IQueryable<T>。那么这种说法是怎么回事?

4

2 回答 2

3

你会找到这个问题的答案

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

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

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

使用 AsQueryable 扩展方法返回一个仅实现 IQueryable 和 IEnumerable 的对象,因此将显示“结果视图”选项。

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

于 2011-06-11T01:07:07.030 回答
0

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

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

由于 EntitySet 仅派生自 IEnumerable,因此这是有道理的——因为枚举器不返回集合,而是按顺序返回对集合中各个成员的引用。

于 2011-06-10T23:38:50.327 回答