2010-12-20 11 views
1

SQLにLINQのリンクEntitySet<T>見てエンティティをマッピングし、私は、以下を参照してください。EntitySet <T>の「結果ビュー」はどこにありますか?

EntitySet debug view

私は私がなるように(.AsQueryable()拡張メソッドを使用することによって達成)、次を見てみたいと思います少しリフレッシュアイコンをクリックしてコンテンツを参照することができます:私は結果が通常の平野EntitySet<T>に見る見ることができないのはなぜ

alt text

を?

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

また、私はthis MSDN pageにそれが言うことに気付きました。

私が見ることができるものから、EntitySet<TEntity>IQueryableIQueryable<T>のいずれかから継承されません。では、その主張はどういうものですか?

答えて

3

あなたは結果のみを表示このquestion

への答えを見つけるには、以下の 条件が

  1. 実装満たす コレクションのために働く(VB.Netだけのために働くのIEnumerableまたはIEnumerableを IEnumerable)
  2. Do は、IList、IList、ICollectionまたはを実装していません。
  3. ないを行いいるICollection(C#の制限のみ)がDebuggerTypeProxyが
  4. System.Core.dllがdebugeeプロセスの特定#2では

にロードされている属性を持っている、のEntitySet <T>さんを実装IList <T>したがって、デバッガは「結果ビュー」オプションを表示しません。

AsQueryable拡張メソッドを使用すると、IQueryableとIEnumerableのみを実装するオブジェクトが返され、結果ビューオプションが表示されます。

他の質問に記載されている回答のうち、#2について詳しく読むことができます。

+0

ありがとう!私はJaredが言ったことについて疑問に思っています: "知られているすべての' IList/ 'と' ICollection 'タイプにはすでに" - 'EntitySet 'の内容を見ることができるメソッドがあります。 'Non-Public members'セクションを掘り起こすか、それを別のタイプに変換する以外に、コンテンツを見るのに便利な方法です。 –

+0

@Allon Guralnek私は、インデックスで項目にアクセスするために演算子[]を使用することについて話していると思います。あなたはデバッガのリストを見るためには内部を掘り下げなければならないが、IEnumerable を使うとリストが完成したランタイムになるかもしれないし、内部に掘り下げても何も返されないそれ。 – MerickOWA

0

EntitySetとIQueryableの両方がEntitySetで直接IQueryableを実装し、次にIEnumerableを実装すると冗長になるため、EntitySetとIQueryableの両方が派生している可能性があります。

AsQueryable()はEntitySetをEnumerableQuery(2番目のイメージに示されている)に変換します。変換が完了すると、結果ビューが表示されます。

エンティティセットはIEnumerableからのみ派生しているので、これは意味があります。列挙子はセットを返さず、セット内の個々のメンバーへの参照を順番に返します。

関連する問題