ASP.NET核心Web API -系统操作无效异常:LINQ表达式'DbSet< Mandate>()

7qhs6swi  于 2022-12-06  发布在  .NET
关注(0)|答案(1)|浏览(145)

在ASP.NET Core-6 Web API项目中,我有以下代码:

private async Task<int> GetTotalCustomers()
{
    var userName = _currentUserService.UserName;

    var merchantId = _dbContext.Merchants
        .Where(u => u.User.UserName == userName)
        .Select(m => m.Id)
        .FirstOrDefault();

    var customersList = await _dbContext.Mandates
        .Where(x => x.MerchantId == merchantId)
        .GroupBy(x => x.DrAccountNumber)
        .ToListAsync();

    return customersList.Count();
}

我得到这个错误:
系统操作无效异常:无法翻译LINQ表达式“DbSet().Where(x =〉x.MerchantId == __merchantId_0).GroupBy(x =〉x.DrAccountNumber).”请以可以翻译得形式重写查询,或者通过插入对“AsEnumerable”,“AsAsyncEnumerable”,“ToList”或“ToListAsync”得调用来显式切换到客户端计算.
如错误中所述,我已经有了ToListAsync()
如何解决此问题?
谢谢

omhiaaxx

omhiaaxx1#

而不是执行两个查询,所有内容都可以写在一个查询中,这样会更有效。

private Task<int> GetTotalCustomers()
{
    var userName = _currentUserService.UserName;

    var query =
        from m in _dbContext.Merchants.Where(m => m.User.UserName == userName)
        from mandate in _dbContext.Mandates.Where(mandate => mandate.MerchantId == m.Id)
        select x.DrAccountNumber;

    return query.Distinct().CountAsync();
}

相关问题