C# 为什么我不能等待';System.Linq.IQueryable
我有以下存储库方法:-C# 为什么我不能等待';System.Linq.IQueryable,c#,entity-framework,linq,asynchronous,entity-framework-6,C#,Entity Framework,Linq,Asynchronous,Entity Framework 6,我有以下存储库方法:- public IQueryable<TSet> getAllScanEmailTo() { return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail")); } 现在,我尝试将上述内容更改为使用async,因此我修改了我的存储库方法,如下所示:- var emailsTo = repository.getAllScanEmailTo().ToL
public IQueryable<TSet> getAllScanEmailTo()
{
return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));
}
现在,我尝试将上述内容更改为使用async,因此我修改了我的存储库方法,如下所示:-
var emailsTo = repository.getAllScanEmailTo().ToList();
public async Task< IQueryable<TSet>> getAllScanEmailTo()
{
return await t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));
}
public async TaskgetAllScanEmailTo()
{
return wait t.TSets.Where(a=>a.Name.StartsWith(“ScanEmail”);
}
但我得到了以下错误:-
Error 1 Cannot await 'System.Linq.IQueryable<Final.Models.TSet>'
错误1无法等待'System.Linq.IQueryable'
既然您提到您正在使用EF6,您可以使用.toListSync()
。然后你就可以等待它了。你为什么希望它能工作IQueryable
不像任务那样是可等待的。IQueryable
是一个查询,而不是一个异步或其他操作ToList
或ToListAsync
是操作。除此之外,您只能对返回Task
或awaiter@PanagiotisKanavos但是我无法将我的存储库方法更改为任务,因为我将得到上面提到的错误..您确定要使用wait,因为wait用于在不锁定主执行线程的情况下模拟非异步功能,所以通常情况下,在等待查询运行时,整个GUI都会锁定,而IQueryable在枚举之前是不会锁定的,使用Wait,您的GUI正常工作,直到Wait返回,然后运行剩下的功能。为什么这个问题有3个否决票?对我来说,这似乎是一个合理的问题。是的,我正在使用EF 6,,,但问题是我无法在以下“repository.getAllScanEmailTo().ToListSync();”上应用.ToListSync(),因为我将得到一个错误,即IQuerable不包含ToListSync()的定义。请确保正确设置了使用命名空间的。是的,我的using namespaces设置正确,因为我可以在其上定义其他方法。ToListSync(),问题可能是我无法使用async with.where?@johnG entity framework 6内置了对该名称空间的支持,请参阅我之前提供给您的链接。Daniel提供给您的链接()对此进行了解释:“用于System.Data.Entity
命名空间的using
语句使我们能够访问EF异步扩展方法。”