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异步扩展方法。”