IQueryable
объекты создаются провайдерами запросов (например, 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, так как вам не нужно фактическое хранилище данных, просто список данных в памяти, которые могут имитировать его.