Где EntitySet<T>"Просмотр результатов"?

При взгляде на связанный EntitySet<T> связанного объекта LINQ to SQL, я вижу следующее:

EntitySet отладочный вид

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

альтернативный текст

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

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

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

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

2 ответа

Решение

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

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

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

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

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

Вы можете прочитать больше о № 2 в ответе, приведенном в другом вопросе.

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

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

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

Другие вопросы по тегам