Sobes.tech
Back to questions
Junior — Middle
66

Объясните различия между интерфейсами IQueryable и IEnumerable в контексте работы с данными.

Companies where asked
AstonAston

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-запрос к БД