IQueryable 模型不包含 GetAwaiter 的定义,并且没有可访问的扩展 GetAwaiter 接受 IIncludableQueryable 类型的第一个参数

问题描述 投票:0回答:1

当我尝试对数据库进行查询时,出现上述错误。这在 .NET 5 中运行良好,但是当我在 .NET 6 中创建一个新项目并使用完全相同的查询时,我收到错误 - 我可能做错了什么?

这是我的代码:

public async Task<IQueryable<Employee>> FindAllEmployees()
{
  try
  {
      IQueryable<Employee> employeeModel = await _employee.Context.employee
          .AsNoTracking()
          .Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
          .Include(a => a.PrincipalMember); //error appears here

      return employeeModel;
  }
  catch (Exception ex)
  {
      _logService.LogError(ex.Message);
      throw;
  }
}

我尝试添加

ToListAsync()
并且它对编译器错误进行了排序,但随后我在运行时收到错误

无法将“Collections.Generic.List

1[Microsoft.EntityFrameworkCore.Query.IIncludableQueryable
2”类型的对象转换为“Generic.ICollection”类型

IQueryable<Employee> employeeModel = 
    (IQueryable<Employee>)await _employeeContext.Employee.AsNoTracking()
    .Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
    .Include(a => a.PrincipalMember).ToListAsync();
c# entity-framework linq .net-6.0
1个回答
1
投票

实现后你应该返回

IEnumerable
IQueryable
不再需要,可能会影响性能。

public async Task<IEnumerable<Employee>> FindAllEmployees()
{
    try
    {
        var employeeModel = await _employee.Context.employee
            .AsNoTracking()
            .Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
            .Include(a => a.PrincipalMember)
            .ToListAsync();

        return employeeModel;
    }
    catch (Exception ex)
    {
        _logService.LogError(ex.Message);
        throw;
    }
}

但是如果你还需要

IQueryable
不破坏界面,你可以打电话

return employeeModel.AsQueryable();

但请注意,这个

IQueryable
将从
IEnumerable
创建,并将在内存中与物化对象一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.