Назад к вопросам
Middle+
2
Задача с LINQ: что будет выведено? Какой тип у переменной query? В чём разница IEnumerable и IQueryable?
Компании, где спрашивали
Core outstaff
Ответ от нейросети
sobes.tech AI
Переменная query в LINQ обычно имеет тип IQueryable<T>, если запрос построен над источником данных, поддерживающим отложенное выполнение (например, Entity Framework). Если запрос построен над коллекцией в памяти, то тип будет IEnumerable<T>.
Что будет выведено? — зависит от конкретного запроса и данных, но важно понимать, что IQueryable откладывает выполнение запроса до момента перечисления, а IEnumerable выполняет запрос сразу или работает с уже загруженными данными.
Разница между IEnumerable и IQueryable:
IEnumerable<T>— интерфейс для перебора коллекции в памяти. Запросы LINQ кIEnumerableвыполняются в памяти, после того как данные загружены.IQueryable<T>— расширяетIEnumerable, позволяет строить выражения, которые переводятся в запросы к источнику данных (например, SQL). Запросы выполняются на стороне сервера (БД).
Пример:
IQueryable<User> query = dbContext.Users.Where(u => u.Age > 18);
// Запрос не выполнен до перечисления
foreach(var user in query) {
Console.WriteLine(user.Name);
}
Здесь query — IQueryable<User>, запрос к БД выполнится при переборе.
Если бы это был IEnumerable<User>, то данные уже были бы загружены в память, и фильтрация происходила бы локально.