1

LINQ to SQL マップ エンティティのリンクEntitySet<T>を見ると、次のように表示されます。

EntitySet デバッグ ビュー

.AsQueryable()小さな更新アイコンをクリックしてコンテンツを表示できるように、(拡張メソッドを使用して達成された) 以下を確認したいと思います。

代替テキスト

通常のプレーンで結果ビューが表示されないのはなぜEntitySet<T>ですか?

また、この MSDN ページに次のように記載されていることに気付きました。

LINQ to SQL では、EntitySet<TEntity>クラスがIQueryableインターフェイスを実装します。

私が見ることができるものから、どちらもEntitySet<TEntity>継承しません。では、その主張はどうなっているのでしょうか。IQueryableIQueryable<T>

4

2 に答える 2

3

この質問に対する答えが見つかります

結果ビューは、次の条件を満たすコレクションに対してのみ機能します

  1. IEnumerable または IEnumerable を実装します (VB.Net は IEnumerable に対してのみ機能します)。
  2. IList、IList、ICollection、または ICollection を実装しない( C# の制限のみ)
  3. DebuggerTypeProxy 属性を持たない
  4. System.Core.dll が debugee プロセスに読み込まれます

特に #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 に変換することです (2 番目の画像に示すように)。その変換が完了した後にのみ、結果ビューを表示できます。

EntitySet は IEnumerable からのみ派生するため、列挙子はセットを返すのではなく、セット内の個々のメンバーを順番に参照するため、これは理にかなっています。

于 2011-06-10T23:38:50.327 に答える