В контексте С# на .Net 4.0 существуют ли какие-либо встроенные объекты, которые реализуют IQueryable<T>
?
Какие типы экземпляров, реализующие IQueryable <T>, доступны в .NET 4.0?
Ответ 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, так как он пошел платить за игру, поэтому я могу ошибаться.