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

Два Include коллекций: декартов взрыв в одном запросе

Эндпоинт выгружает заказы вместе с позициями и платежами:

var orders = await db.Orders
    .Where(o => o.CreatedAt >= from)
    .Include(o => o.Items)
    .Include(o => o.Payments)
    .ToListAsync();

У типичного заказа 20 позиций и 3 платежа. Что происходит на уровне SQL и что с этим делают?

  • База вернёт 60 строк на заказ вместо 23: две коллекции перемножаются в одном JOIN, помогает AsSplitQuery
  • База вернёт 23 строки на заказ: JOIN не размножает строки, если связи настроены корректно
  • EF выбросит исключение: два Include с коллекциями в одном запросе не поддерживаются
  • EF и так выполнит по отдельному запросу на каждую коллекцию, а AsSplitQuery, наоборот, склеит их в один запрос с JOIN

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

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

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

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