Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用管理器的Linq查询_C#_Linq - Fatal编程技术网

C# 引用管理器的Linq查询

C# 引用管理器的Linq查询,c#,linq,C#,Linq,我在我的LINQ in MVC应用程序中有一个要求,即我需要在下拉列表中填充employeeId列表,以便将经理分配给不是其下属的员工。下面是一个场景,让我的观点更加清晰- Id MgrId 1 2 1 3 4 2 5 6 3 我试着 这只适用于一个级别,从上面我选择empid 1进行编辑以分配mgr时,下拉列表应仅包含empid 3、5和6。我在LINQ和hopt方面没有太多的专业知识,这可以使用LINQ完成。任何建议/帮助都将不胜感激。您可以使用递归

我在我的LINQ in MVC应用程序中有一个要求,即我需要在下拉列表中填充employeeId列表,以便将经理分配给不是其下属的员工。下面是一个场景,让我的观点更加清晰-

Id  MgrId
1 
2    1   
3    
4    2  
5
6    3
我试着


这只适用于一个级别,从上面我选择empid 1进行编辑以分配mgr时,下拉列表应仅包含empid 3、5和6。我在LINQ和hopt方面没有太多的专业知识,这可以使用LINQ完成。任何建议/帮助都将不胜感激。

您可以使用递归方法查找给定员工的所有下属(注意,如果层次结构深度大,您可以使用递归代替):


此方法将返回ID为{2,4}的员工。然后,除了直接或间接隶属于所选员工的员工外,电话将为您提供所有员工。

感谢Sergey的及时回复,并感谢您的建议。我试过了,但这是我所期望的,也就是说,我期望除下属之外的所有员工的EMPID,但在这种情况下,它会获取下属ID。@Harry不,它会获取那些不属于下属的员工的ID。也许你没有看到答案的
,除了
部分谢谢,谢尔盖,我错过了很多。Serg,虽然你说的很对,但我的列表不仅仅是Employee类,它是一个由其他类对象(Dept、Finance等)组成的viewmodel,当我尝试这个时,它会返回所有。对此有什么建议吗?@Harry如果没有看到您的实际代码,很难判断出哪里出了问题。确保将完全相同的员工集合传递给Except和GetSubfiliants
empBO.GetAllEmpList().Where(s => s.Id != model.ID && s.MgrId != model.ID); 
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));