我正在使用ASP.NET Core与Entity Framework。
首先我选择一个员工,然后选择所有满足条件的员工(为了显示哪些工作):
var a = db.Employee.FirstOrDefault();
var b = db.Employee.Where(x => x.FirstName == "Jack");
现在我尝试使用异步方式执行相同的操作:
var c = await db.Employee.FirstOrDefaultAsync();
var d = await db.Employee.Where(x => x.FirstName == "Jack");
然而,“WHERE”没有异步版本,代码的第二行无法编译 - 出现错误。
...不包含GetAwaiter的定义...
在这种情况下,我如何执行具有“WHERE”条件的“SELECT”操作?
好的,从答案中我看到ToListAsync()将解决“var d = ...”行的问题。但是,有一个继续存在的问题,我之前没有意识到它很重要。在这种情况下,我只是尝试选择一组将被删除的记录,我并不想访问数据以便在代码中进一步操作它。所以我修改了所有4个代码版本,目的是同步或异步地删除一个或多个记录。为什么只有最后一个需要ToListAsync(),那样不会实际从数据库检索记录吗?
var a = db.Employee.FirstOrDefault();
db.Employee.Remove(a);
// db.Employee.RemoveRange(a); <- this also works?
db.SaveChanges();
var b = db.Employee.Where(x => x.FirstName == "Jack");
db.Employee.RemoveRange(b);
db.SaveChanges();
var c = await db.Employee.FirstOrDefaultAsync();
db.Employee.Remove(c);
await db.SaveChangesAsync();
var d = await db.Employee.Where(x => x.FirstName == "Jack").ToListAsync();
db.Employee.RemoveRange(d);
await db.SaveChangesAsync();