Где EntitySet<T>"Просмотр результатов"?
При взгляде на связанный EntitySet<T>
связанного объекта LINQ to SQL, я вижу следующее:
Я хотел бы видеть следующее (достигается с помощью .AsQueryable()
метод расширения), чтобы я мог нажать на маленький значок обновления и увидеть содержимое:
Почему я не могу увидеть представление результатов на обычной равнине EntitySet<T>
?
Также я заметил, что на этой странице MSDN написано:
В LINQ to SQL
EntitySet<TEntity>
класс реализуетIQueryable
интерфейс.
Из того, что я вижу, EntitySet<TEntity>
не наследует ни от одного IQueryable
ни IQueryable<T>
, Так что с этим утверждением?
2 ответа
Вы найдете ответ на этот вопрос
Представление результатов работает только для коллекций, которые удовлетворяют следующим условиям
- Реализация IEnumerable или IEnumerable (VB.Net работает только для IEnumerable)
- Не используйте IList, IList, ICollection или ICollection (только ограничение C#)
- Не имеют атрибута DebuggerTypeProxy
- System.Core.dll загружается в процессе debugee
В частности, #2, EntitySet
Использование метода расширения AsQueryable возвращает объект, который реализует только IQueryable и IEnumerable и, следовательно, отображает опцию "Представление результатов".
Вы можете прочитать больше о № 2 в ответе, приведенном в другом вопросе.
Терминология на странице, на которую вы ссылаетесь, может быть немного неправильной - поскольку EntitySet и IQueryable являются производными от IEnumerable, если EntitySet реализует IQueryable напрямую, тогда реализация IEnumerable будет избыточной.
AsQueryable() выполняет преобразование EntitySet в EnumerableQuery (как показано на втором изображении) - и только после того, как это преобразование выполнено, можно увидеть представление результатов.
Поскольку EntitySet наследуется только от IEnumerable, это имеет смысл - поскольку перечислители не возвращают наборы, а ссылаются на отдельные элементы в наборе в последовательном порядке.