Метод C# внутри Where: почему запрос не переводится в SQL
На актуальной версии EF Core в репозитории написан такой поиск:
private static string Normalize(string s) => s.Trim().ToLowerInvariant();
var users = await db.Users
.Where(u => Normalize(u.Email) == normalized)
.ToListAsync();
Что произойдёт при выполнении и как это правильно чинить?
- Запрос выполнится, но вернёт пустой список: EF сравнит нормализованное значение с сырым значением из базы и совпадений не найдёт
- EF переведёт вызов в SQL-функцию LOWER, запрос отработает штатно и воспользуется индексом по email
- EF не сможет перевести пользовательский метод в SQL и выбросит исключение о непереводимом выражении
- EF молча выполнит фильтр в памяти приложения: результат будет верным, просто медленным
