【发布时间】:2022-11-27 09:32:53
【问题描述】:
ALTER PROCEDURE [dbo].[EmployeeManagers]
@ID INT
AS
Begin
SET FMTONLY OFF;
WITH subordinate AS (
SELECT Id,
Name,
Surname,
BirthDate,
PositionId,
ManagerId,
CreatedDate,
DeletedDate,
IsDeleted,
ModifiedDate,
1 AS [Managing Level]
FROM Employees
WHERE Id = @ID
UNION ALL
SELECT e.Id,
e.Name,
e.Surname,
e.BirthDate,
e.PositionId,
e.ManagerId,
e.CreatedDate,
e.DeletedDate,
e.IsDeleted,
e.ModifiedDate,
[Managing Level] + 1
FROM Employees e
JOIN subordinate s
ON e.Id=s.ManagerId
)
SELECT
m.Id ,
m.Name,
m.Surname,
m.BirthDate,
m.PositionId,
m.ManagerId,
m.CreatedDate,
m.DeletedDate,
m.IsDeleted,
m.ModifiedDate,
s.[Managing Level]
FROM Employees m
JOIN subordinate s
ON s.ManagerId = m.Id
ORDER BY [Managing Level];
end
这是我获取员工经理的存储过程。获得所有员工经理并赋予他们管理级别
public string Name { get; set; }
public string Surname { get; set; }
public DateTime BirthDate { get; set; }
public int? PositionId { get; set; }
public Position Position { get; set; }
public int? ManagerId { get; set; }
public ICollection<EmployeeDepartments> EmployeeDepartments { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? DeletedDate { get; set; }
public bool? IsDeleted { get; set; }
public DateTime? ModifiedDate { get; set; }
}
这是我的员工实体
当我调用存储过程时,它只返回员工实体字段,但我也想获得管理级别
public IQueryable<Employee> GetEmployeeManagers(int employeeId)
{
var parameter = new SqlParameter("@ID", employeeId);
var managers = _context.Employees.FromSqlRaw("spManagersTable @ID", parameter);
return managers;
}
我无法获得管理级别,这是工作,但我也想获得管理级别。 我还需要在我的员工实体中获得管理级别
【问题讨论】:
-
在您的 with 子句中,您将一个具有 Employees 表的 ID 值的过滤行与“Employees”表的其余部分合并在一起,我确信具有 ID 的过滤行会重复,因为您合并了它们。唯一的区别是联合记录的 [Managing Level] + 1。您还使用未引用的子句加入了从属表。然后,您再次将带有子句结果的“下属”与“雇员”表连接起来。我不确定您要从数据库中检索什么。你能详细说明一下吗?
-
我试图让 Entered Employee 的所有经理
标签: sql-server entity-framework