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

Фильтрация после ToListAsync: почему такой метод опасен

В репозитории есть метод:

public async Task<List<Order>> GetBigOrdersAsync(decimal min)
{
    var all = await db.Orders.ToListAsync();
    return all.Where(o => o.Total > min).ToList();
}

В таблице orders около 4 млн строк, условию обычно удовлетворяют десятки. В чём главная проблема?

  • Проблема только в лишнем вызове ToList в конце — на потребление памяти это почти не влияет
  • Ничего страшного: EF анализирует последующие вызовы LINQ и всё равно добавит WHERE в итоговый SQL, так что из базы приедут только нужные строки
  • Запрос гарантированно упадёт по таймауту команды на любой таблице такого размера
  • После ToListAsync данные уже в памяти приложения: из базы приезжают все 4 млн строк, а фильтр работает по объектам

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

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

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

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