Entify框架 - 异步选择与在哪里条件

问题描述:

我正在使用ASP.NET Core与实体框架。Entify框架 - 异步选择与在哪里条件

首先,我选择一个员工,然后满足条件的(用于显示的目的是什么在起作用)所有员工:

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定义...

如何进行SELECT在这种情况下WHERE条件?


好的,从答案我看到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(); 
+1

使用ToArrayAsync,ToListAsync。 – Evk

+0

谢谢,请参阅问题的延续。 – Marko

+0

RemoveRange将首先从数据库中提取所有项目,然后标记为已删除。因此,首先调用ToListAsync是没有害处的 - 否则它将由RemoveRange本身完成(同步)。 – Evk

你可以这样做。

如果您需要检索一个对象,则:

var d = await db.Employee.FirstOrDefaultAsync(x => x.FirstName == "Jack"); 

如果您需要检索列表,则:

var d = await db.Employee.Where(x => x.FirstName == "Jack").ToListAsync(); 
+0

谢谢,请参阅问题的继续。 – Marko