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 вытянуть все позиции в память и суммировать их уже в приложении
