';等待';运算符只能在异步lambda表达式错误中使用

本文关键字:表达式 错误 lambda 等待 运算符 异步 | 更新日期: 2023-09-27 18:20:55

我有这个函数:

    public async Task<IEnumerable<RegionBreif>> GetAsync()
    {
    return await Table.Where(x => x.SiteId == _siteId).Select(r => new RegionBreif
    {
        IsServiceable = await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id)
    }).ToArrayAsync();
}

这个功能:

public static async Task<bool?> checkIfServicable(DbContext context, int? _siteId, int _regionId)
{
    var t = (from ir in context.Set<InspectionReview>()
             join so in context.Set<SiteObject>() on ir.ObjectId equals so.Id
             where so.SiteRegionId == _regionId && so.SiteId == _siteId
             select (bool?)
             ir.IsNormal);
    return t.Count() == 0 ? (bool?)null : t.Any(x => x.Value == false) ? false : true;
}

在这一行:

await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id)

我得到这个错误:

错误13"await"运算符只能在异步lambda表达式中使用。请考虑使用"async"修饰符标记此lambda表达式。

';等待';运算符只能在异步lambda表达式错误中使用

问题出在传递给Select的lambda表达式中。如果要使用类型create RegionBreif中的await,则必须传递一个async lambda表达式,如下所示:

Select(async r => new RegionBreif
{
    IsServiceable = await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id)
})