Entify Framework - async选择where条件

时间:2016-11-19 21:29:13

标签: c# entity-framework select asynchronous

我正在使用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的定义...

在这种情况下,如何执行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 个答案:

答案 0 :(得分:15)

你可以这样做。

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

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

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

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