Где EntitySet <T>"Просмотр результатов"? - PullRequest
1 голос
/ 20 декабря 2010

При просмотре связанной EntitySet<T> сопоставленной сущности LINQ to SQL я вижу следующее:

EntitySet debug view

Мне бы хотелось увидеть следующее (достигнутое с помощью метода расширения .AsQueryable()), чтобы я мог щелкнуть по маленькому значку обновления и увидеть содержимое:

alt text

Почему я не могу увидеть представление результатов на обычной равнине EntitySet<T>?

Также я заметил, что на этой странице MSDN там написано:

В LINQ to SQL класс EntitySet<TEntity> реализует интерфейс IQueryable.

Из того, что я вижу, EntitySet<TEntity> не наследует ни IQueryable, ни IQueryable<T>. Так что с этим утверждением?

Ответы [ 2 ]

3 голосов
/ 11 июня 2011

Вы найдете ответ на этот вопрос

Просмотр результатов работает только для коллекции, которые соответствуют следующим условия

  1. Реализация IEnumerable или IEnumerable (VB.Net работает только для IEnumerable)
  2. Не не реализовать IList, IList, ICollection или ICollection (только ограничение C #)
  3. У нет есть атрибут DebuggerTypeProxy
  4. System.Core.dll загружается в процессе отладки

В частности, # 2, EntitySet реализует IList , поэтому отладчик не будет отображать опцию «Просмотр результатов».

Использование метода расширения AsQueryable возвращает объект, который реализует только IQueryable и IEnumerable и, следовательно, отображает параметр «Представление результатов».

Подробнее о № 2 вы можете прочитать в ответе на другой вопрос.

0 голосов
/ 11 июня 2011

Терминология на странице, на которую вы ссылаетесь, может быть немного неправильной - поскольку EntitySet и IQueryable наследуются от IEnumerable, если EntitySet напрямую реализует IQueryable, тогда реализация IEnumerable будет избыточной.

Что AsQueryable () делает, так это конвертирует EntitySet в EnumerableQuery (как показано на втором изображении) - и только после того, как это преобразование выполнено, можно увидеть представление результатов.

Поскольку EntitySet наследуется только от IEnumerable, это имеет смысл - поскольку перечислители не возвращают наборы, а ссылаются на отдельные элементы в наборе в последовательном порядке.

...