2010-12-20 2 views
1

LINQ to SQL 매핑 된 엔티티의 링크 된 EntitySet<T>을 보면 다음과 같은 것을 볼 수 있습니다.EntitySet <T>의 "결과보기"는 어디에 있습니까?

EntitySet debug view

다음과 같은 내용을보고 싶습니다. 작은 새로 고침 아이콘을 클릭하고 내용을 확인하십시오.

alt text

일반 EntitySet<T>에서 결과보기를 볼 수없는 이유는 무엇입니까?

또한 this MSDN page에 다음과 같이 나타났습니다.

LINQ to SQL에서 EntitySet<TEntity> 클래스는 IQueryable 인터페이스를 구현합니다.

내가 볼 수 있듯이 EntitySet<TEntity>IQueryable이나 IQueryable<T>에서 상속받지 않습니다. 그래서 그 주장은 어때?

답변

3

당신은 결과 만 볼이 question

에 대한 답을 찾을 수는 다음 조건

  1. 구현 충족 컬렉션 작동 (VB.Net는 작동을 IEnumerable 또는 IEnumerable을 IEnumerable)
  2. 아니요은 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 '내용을 볼 수있는 메소드가 있습니다. '비공개 회원'섹션을 파거나 다른 유형으로 변환하는 것 외에는 콘텐츠를 보는 편리한 방법입니다. –

+0

@Allon Guralnek 나는 연산자를 사용하여 색인으로 항목에 액세스하는 것에 대해 이야기하고 있다고 생각합니다. 당신은 디버거의 목록을 보려면 내부를 파고들 필요가 있지만 IEnumerable 을 사용하면 목록이 완성 된 런타임이 될 수 있으며 호출하지 않으면 내부로 파고 들지 않아서 반환 할 내용을 알려줍니다 그것. – MerickOWA

0

EntitySet에서 IQueryable을 직접 구현 한 다음 IEnumerable을 구현하면 EntitySet과 IQueryable이 모두 IEnumerable에서 파생되므로 참조하는 페이지의 용어가 약간 벗어날 수 있습니다.

AsQueryable()은 EntitySet을 EnumerableQuery (두 번째 이미지에 표시된대로)로 변환하고 변환이 완료된 후에 만 ​​결과보기를 볼 수 있습니다.

EntitySet은 IEnumerable에서만 파생되므로 Enumerator는 집합은 있지만 개별 구성원에 대한 참조는 순차적 순서로 반환하지 않으므로 의미가 있습니다.