Sobes.tech
Back to questions
Middle+
1

Задача с LINQ: что будет выведено? Какой тип у переменной query? В чём разница IEnumerable и IQueryable?

Companies where asked
Core outstaff

Answer from AI

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);
}

Здесь queryIQueryable<User>, запрос к БД выполнится при переборе.

Если бы это был IEnumerable<User>, то данные уже были бы загружены в память, и фильтрация происходила бы локально.