これは機能します:
var user = db.Users.OrderByDescending(u => u.Id).FirstOrDefault(u => u.Email == "asd@gmail.com" && u.Password == "8a79hjhfas8d7fd89");
1 人のユーザーのみを返す sql ステートメントが正しく生成されます。
理論的には同じである以下のコードは、データベースからすべてのユーザーを取得し、その後にのみフィルターを適用します。.ToList() を実行しているかのように機能するため、データベースからすべてを評価し、正しい SQL ステートメントを生成する代わりに、通常の IEnumerable でフィルターを適用します。
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");
これは Entity Framework のバグですか、それとも何か不足していますか?