Выбор ответа Junior EF Core спрашивают часто обновлено
Где выполняется фильтр
Вопрос
Где выполнится фильтрация?
var adults = db.Users.ToList().Where(u => u.Age >= 18).ToList();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В памяти: ToList() уже загрузил всех из базы. ToList() материализует запрос: выполняется SELECT всех пользователей, и дальнейший Where работает с List<User через LINQ to Objects.
Варианты ответа
- В базе данных: EF Core перенесёт
Whereв SQL - В базе, но только если есть индекс по
Age - В памяти:
ToList()уже загрузил всех из базыправильный ответ - Нигде: код не скомпилируется из-за
List<User>
Разбор
ToList() материализует запрос: выполняется SELECT всех пользователей, и дальнейший Where работает с List<User> через LINQ to Objects. Чтобы фильтр ушёл в SQL, Where должен стоять до материализации. Индекс тут ни при чём, код корректен с точки зрения компилятора.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.