這工作:實體框架不尊重懶評價
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");
這是實體中的錯誤框架或我錯過了什麼?