C# 哪里是EntitySet<;T>';s";结果视图;?

C# 哪里是EntitySet<;T>';s";结果视图;?,c#,linq-to-sql,iqueryable,entityset,debuggervisualizer,C#,Linq To Sql,Iqueryable,Entityset,Debuggervisualizer,当查看LINQ到SQL映射实体的链接EntitySet时,我看到以下内容: 我希望看到以下内容(通过使用.AsQueryable()扩展方法实现),以便单击小刷新图标查看内容: 为什么我不能在普通的EntitySet上查看结果视图 另外,我注意到上面写着: 在LINQ to SQL中,EntitySet类实现了IQueryable接口 在我看来,EntitySet既不是从IQueryable继承的,也不是从IQueryable继承的。那么,这种说法是怎么回事呢?您引用的页面上的术语可能有点不

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

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

为什么我不能在普通的
EntitySet
上查看结果视图

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

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


在我看来,
EntitySet
既不是从
IQueryable
继承的,也不是从
IQueryable
继承的。那么,这种说法是怎么回事呢?

您引用的页面上的术语可能有点不正确-因为EntitySet和IQueryable都源自IEnumerable,如果EntitySet直接实现IQueryable,那么实现IEnumerable将是多余的

AsQueryable()所做的是将EntitySet转换为EnumerableQuery(如第二幅图像所示),并且只有在转换完成后才能看到结果视图


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

您将找到答案

“结果”视图仅适用于 符合以下条件的集合 条件

  • 实现IEnumerable或IEnumerable(VB.Net仅适用于 (可数)
  • 不要执行IList、IList、ICollection或 i收集(仅限C#限制)
  • 不具有DebuggerTypeProxy属性
  • System.Core.dll在被调试对象进程中加载
  • 特别是#2,EntitySet实现的IList,因此调试器不会显示“结果视图”选项

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


    您可以在另一个问题的答案中阅读更多关于#2的内容。

    请注意,谢谢!我只是想知道Jared说了什么:“每个已知的
    IList/
    ICollection
    类型都已经有了一个方法,可以让您查看内容”-
    EntitySet
    必须是一个例外-它没有任何方便的方式来查看内容,只能深入到
    非公共成员
    部分或将其转换为另一种类型。@Allon Guralnek我想他们说的是使用运算符[]按索引访问项目。您是对的,为了在调试器中查看列表,您必须深入到内部,但是使用IEnumerable,列表可能是完整的运行时生成的,除非调用它,否则深入到内部不会告诉您它将返回什么。