Выбор ответа Junior EF Core спрашивают часто обновлено

Где выполняется фильтр

Вопрос

Где выполнится фильтрация?

var adults = db.Users.ToList().Where(u => u.Age >= 18).ToList();

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В памяти: ToList() уже загрузил всех из базы. ToList() материализует запрос: выполняется SELECT всех пользователей, и дальнейший Where работает с List<User через LINQ to Objects.

Варианты ответа

  1. В базе данных: EF Core перенесёт Where в SQL
  2. В базе, но только если есть индекс по Age
  3. В памяти: ToList() уже загрузил всех из базыправильный ответ
  4. Нигде: код не скомпилируется из-за List<User>

Разбор

ToList() материализует запрос: выполняется SELECT всех пользователей, и дальнейший Where работает с List<User> через LINQ to Objects. Чтобы фильтр ушёл в SQL, Where должен стоять до материализации. Индекс тут ни при чём, код корректен с точки зрения компилятора.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.