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

发布于 2024-10-08 21:23:27 字数 743 浏览 3 评论 0原文

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

EntitySet debug view

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

alt text

为什么我看不到常规普通 EntitySet 上的结果视图?

另外,我注意到 此 MSDN 页面 上写着:

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

据我所知, EntitySet 既不继承于 IQueryable 也不继承于 IQueryable。那么这个说法是怎么回事呢?

When looking at a linked EntitySet<T> of a LINQ to SQL mapped entity, I see the following:

EntitySet debug view

I'd like to see the following (achieved by using the .AsQueryable() extension method) so that I can click the little refresh icon and see the content:

alt text

Why can't I see the Results View on a regular plain EntitySet<T>?

Also, I've noticed that on this MSDN page it says:

In LINQ to SQL, the EntitySet<TEntity> class implements the IQueryable interface.

From what I can see, EntitySet<TEntity> doesn't inherit from either IQueryable nor IQueryable<T>. So what's up with that claim?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

☆獨立☆ 2024-10-15 21:23:27

您会找到这个问题的答案 问题

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

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

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

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

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

You'll find the answer to this question

The results view only works for
collections which meet the following
conditions

  1. Implement IEnumerable or IEnumerable (VB.Net only works for
    IEnumerable)
  2. Do not implement IList, IList, ICollection or
    ICollection (C# restriction only)
  3. Do not have a DebuggerTypeProxy attribute
  4. System.Core.dll is loaded in the debugee process

In particular #2, EntitySet<T> implement's IList<T> therefore the debugger won't show a "Results View" option.

Using the AsQueryable extension method returns an object which only implements IQueryable and IEnumerable and therefore will show the "Results View" option.

You can read more about the #2 in the answer given in the other question.

七秒鱼° 2024-10-15 21:23:27

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

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

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

The terminology on the page you reference may be a bit off - since both EntitySet and IQueryable derive from IEnumerable, if EntitySet implemented IQueryable directly then implementing IEnumerable would be redundant.

What AsQueryable() does is convert the EntitySet to an EnumerableQuery (as shown in your second image) - and only after that conversion is done can the result view be seen.

Since EntitySet only derives from IEnumerable, this makes sense - as Enumerators don't return sets but references to individual members in a set, in a sequential order.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文