Вступить в клуб →
сложнаявопросEntity Framework Core и LINQ

Include перед Select: почему ревьюер просит его убрать

В pull request пришёл код:

var dtos = await db.Orders
    .Include(o => o.Items)
    .Where(o => o.CreatedAt >= from)
    .Select(o => new OrderDto
    {
        Id = o.Id,
        Total = o.Items.Sum(i => i.Price)
    })
    .ToListAsync();

Ревьюер просит убрать Include, автор возражает, что без него сумма посчитается неверно. Кто прав?

  • Прав автор: без Include коллекция Items не будет загружена и Sum вернёт 0
  • Прав ревьюер: при наличии проекции Include игнорируется, и сумма всё равно посчитается на стороне базы
  • Прав автор: без Include EF выполнит отдельный запрос на позиции каждого заказа и получится N+1
  • Прав ревьюер, но по другой причине: Include заставляет EF вытянуть все позиции в память и суммировать их уже в приложении

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела