Подтвердить что ты не робот

Какие типы экземпляров, реализующие IQueryable <T>, доступны в .NET 4.0?

В контексте С# на .Net 4.0 существуют ли какие-либо встроенные объекты, которые реализуют IQueryable<T>?

4b9b3361

Ответ 1

IQueryable объекты создаются Queryable Providers (например, LINQ to SQL, LINQ to Entities/Entity Framework и т.д.). Практически ничего, что можно создать с помощью new в базовой .NET Framework, реализует IQueryable.

IQueryable - это интерфейс, предназначенный для создания поставщиков Queryable, которые позволяют использовать библиотеку LINQ против внешнего хранилища данных путем создания дерева синтаксического анализа. По своей природе Queryables требует контекста - информацию о том, что именно вы запрашиваете. Используя new для создания любого типа IQueryable, независимо от того, возможно ли это, вы не очень далеко.

При этом любой IEnumerable можно преобразовать в IQueryable с помощью метода расширения AsQueryable(). Это создает поверхностно-подобную, но функционально совершенно другую конструкцию за кулисами, как при использовании методов LINQ для простого объекта IEnumerable. Это, вероятно, самый богатый источник запросов, к которым у вас есть доступ, без создания реального поставщика IQueryable. Это изменение очень полезно для модульных тестов LINQ-алгоритмов, поскольку вам не нужен фактический магазин данных, а просто список данных в памяти, которые могут имитировать его.

Ответ 2

EntityCollection делает, как и EnumerableQuery.

Не то, чтобы я думал, что любой из них собирается вас достать. Чтобы помочь, нам нужно знать, что вы действительно пытаетесь решить. Если вы пишете LINQ-провайдера, вы должны прочитать следующее: http://msdn.microsoft.com/en-us/library/bb546158.aspx.

Они рекомендуют писать собственную реализацию.

Ответ 3

Ну, ваш вопрос немного странный... но я считаю, что если вы посмотрите на интерфейс в Reflector, он даст вам список исполнителей в загруженных сборках.

Как отказ от ответственности я не использовал Reflector, так как он пошел платить за игру, поэтому я могу ошибаться.