无法将类型 WebApplication1.models.Table 1 隐式转换为 int

Cannot implicitely convert type WebApplication1.models.Table1 to int

我想在 get api 中使用 sql 查询作为:

[Route("empLevel/{id}")]
public IActionResult GetEmpHierarchy(int id)
{
    List<Employee> emp = entity.Employees.ToList();
    List<Employee> mngr = entity.Employees.ToList();

    var query = (from e in emp
                 join m in mngr on e.MngId equals m.Id into tab1
                 from mngrN in tab1.DefaultIfEmpty()
                 select new Employee { Id = e, MngId = m}).ToList();
    return Ok(query);
}

但是我在行 ID = e 上收到一个错误,它说 e 不能转换为 int。

在我的模型中 class 我有:

public partial class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Grade { get; set; }
    public int? MngId { get; set; }
    public virtual SalarySplit GradeNavigation { get; set; }        
}

请给出解决方案

因为 e 是一种对象,而您的 ID 是一个 int。 所以你可能想要这样的东西。

select new Employee { Id = e.MngId, MngId =  m.Id}).ToList();

变量 e 表示类型 Employee 的对象。您正在尝试将整个对象分配给 属性 Id。相反,您应该使用 e 对象的 属性 中的值。

var query = (from e in emp
             join m in mngr on e.MngId equals m.Id into tab1
             from mngrN in tab1.DefaultIfEmpty()
             select new Employee { Id = e.Id, MngId = m.Id}).ToList();

奖励: 如果我没记错的话,过滤不会在那里应用,你会得到有或没有经理的对象(两者)。在那种情况下,可以简化查询:

var query = (from e in emp
             select new Employee { Id = e.Id, MngId = e.MngId}).ToList();