Это работает:Entity Framework не уважая ленивые вычисления
var user = db.Users.OrderByDescending(u => u.Id).FirstOrDefault(u => u.Email == "[email protected]" && u.Password == "8a79hjhfas8d7fd89");
Это правильно генерирует оператор SQL, который возвращает только один пользователь.
Код, который теоретически один и тот же, приводит всех пользователей из базы данных и только применяет фильтр после этого. Он работает, как если бы я делал .ToList(), таким образом, оценить все из базы данных, и применения фильтра в регулярной IEnumerable, вместо того, чтобы генерировать правильное утверждение SQL:
public static User Get(Func<User, bool> predicate)
{
return db.Users.OrderByDescending(u => u.Id).FirstOrDefault(predicate);
}
var user = User.Get(u => u.Email == "[email protected]" && u.Password == "8a79hjhfas8d7fd89");
Является ли это ошибка на Entity Рамочной или я чего-то не хватает?