LINQ查询引用管理器



我在MVC应用程序中的LINQ中有一个要求,即我需要在下拉列表中填充员工列表,以将MGR分配给员工,他们的下属不是从属于他或他的下属。为了使我的观点更加清楚下面是场景 -

Id  MgrId
1 
2    1   
3    
4    2  
5
6    3

我尝试

empBO.GetAllEmpList().Where(s => s.Id != model.ID && s.MgrId != model.ID); 

这仅适用于一个级别,从上面我选择Empid 1进行编辑以分配MGR时,下拉列表只能包含3,5和6的Empid可以使用linq完成任何建议/帮助。

您可以使用递归方法来查找给定员工的所有下属(注意,如果层次结构深度很大,则可以使用查询/堆栈实现而不是递归):

public static IEnumerable<Employee> GetSubordinates(
    IEnumerable<Employee> employees, int employeeId)
{
    foreach (var employee in employees)
    {
        if (employee.MgrId != employeeId)
            continue;
        yield return employee;
        foreach (var subordinate in GetSubordinates(employees, employee.Id))
            yield return subordinate;
    }
}

获得可用员工将很简单:

var employees = GetAllEmpList();
var available = employees.Except(GetSubordinates(employees, selectedId));

此方法将返回具有IDS {2,4}的员工。然后致电枚举。除了那些直接或间接从属于选定的人以外,还将为您提供所有员工。

相关内容

  • 没有找到相关文章

最新更新