Почему AsQueryable() для класса DBSet отсутствует в документации MSDN?
Эта ссылка описывает класс DBSet. Этот тип реализует IQueryable, что означает, что он должен иметь реализацию для AsQueryable(). Но в списке в ссылке я не могу найти этот метод. Может кто-нибудь сказать мне, почему?
2 ответа
Мой первоначальный ответ, хотя, надеюсь, полезный, был не совсем верным, как указал Эли Арбель, поэтому я переписал его.
DbSet<TEntity>
класс имеет сложную иерархию наследования. Вот диаграмма UML, показывающая только ее часть.
Метод AsQueryable<TEntity>()
это метод расширения, определенный на IEnumerable<TEntity>
который преобразует IEnumerable<TEntity>
в IQueryable<TEntity>
и в качестве DbSet<TEntity>
инвентарь IEnumerable<TEntity>
Вы можете использовать метод расширения:
IQueryable<MyEntity> queryable = myDbSet.AsQueryable();
Тем не менее, это не очень полезно, потому что DbSet<TEntity>
также реализует IQueryable<TEntity>
так зовет AsQueryable()
просто вернет IQueryable<TEntity>
интерфейс. Вы могли бы также написать приведенный выше фрагмент как:
IQueryable<MyEntity> queryable = myDbSet;
Это поведение объясняется в документации для Queryable.AsQueryable()
какая документация вы ищете.
Правильно, что связанная страница документации включает в себя множество методов расширения, но, поскольку набор возможных методов расширения в принципе не ограничен, нет гарантии, что все методы расширения будут в списке. В частности оба AsQueryable()
а также AsEnumerable()
не хватает.
Документация MSDN часто крайне противоречива в том, как они документируют вещи. Если вам это не нравится, внизу каждой страницы есть ссылка, чтобы оставить свой отзыв.
В этом случае они перечислили интерфейсы, которые реализованы явно, и дают ссылки на эти интерфейсы, предполагая, что вы достаточно умны, чтобы знать, что им следовать.
Редактировать: Я думаю, что люди неверно истолковали мой комментарий "если вы достаточно умный", как что-то вроде подавления. Я имел в виду, что авторы MSDN предполагают, что вы достаточно умны, чтобы следовать им, поэтому им не нужно дублировать все.