Back to questions
Aston
Junior — Middle
66
Объясните различия между интерфейсами IQueryable и IEnumerable в контексте работы с данными.
Companies where asked
Answer from AI
sobes.tech AI
IEnumerable и IQueryable — интерфейсы в C#, которые используются для работы с коллекциями и запросами, но имеют разные цели и поведение:
-
IEnumerable<T> — представляет коллекцию, по которой можно итерироваться. Запросы к данным выполняются в памяти (in-memory). Подходит для работы с локальными коллекциями, например, списками или массивами.
-
IQueryable<T> — расширяет
IEnumerable<T>и позволяет строить запросы, которые могут быть преобразованы в выражения, например, SQL-запросы. Запросы выполняются на стороне источника данных (например, базы данных), что позволяет оптимизировать выборку и уменьшить объем передаваемых данных.
Ключевые отличия:
| Особенность | IEnumerable<T> | IQueryable<T> |
|---|---|---|
| Место выполнения | В памяти (клиентская сторона) | На сервере (источник данных) |
| Тип данных | Любые коллекции | Источники данных, поддерживающие LINQ (например, Entity Framework) |
| Поддержка отложенного выполнения | Да | Да |
| Использование | Перебор элементов | Построение и выполнение запросов |
Пример:
IEnumerable<Product> products = GetProducts(); // локальная коллекция
var cheapProducts = products.Where(p => p.Price < 100); // фильтрация в памяти
IQueryable<Product> queryableProducts = dbContext.Products; // запрос к БД
var cheapProductsFromDb = queryableProducts.Where(p => p.Price < 100); // SQL-запрос к БД