这有效:
var user = db.Users.OrderByDescending(u => u.Id).FirstOrDefault(u => u.Email == "asd@gmail.com" && 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 == "asd@gmail.com" && u.Password == "8a79hjhfas8d7fd89");
这是实体框架上的错误还是我遗漏了什么?