首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表中的层次结构雇员/经理

列表中的层次结构雇员/经理
EN

Stack Overflow用户
提问于 2014-06-02 18:04:14
回答 1查看 2.1K关注 0票数 0

我有三个班,我想得到选定的雇员的层次结构。

代码语言:javascript
运行
复制
public class Employees
{
    public int empId{ get; set; }
    public string empName { get; set; }
    public Employees(int id, string name)
    {
        empId= id;
        empName = name;
    }
}
public class EmployeeManager
{
    public int empmgr_id { get; set; }
    public int emp_id { get; set; }
    public int mgr_id{ get; set; }
    public EmployeeManager(int emid, int eid, int mid)
    {
        empmgr_id = emid;
        emp_id = eid;
        mgr_id= mid;
    }
}

public static class EmpMgrData
{
    public static IEnumerable<Employees> EmpList()
    {
        var lstEmp = new List<Employees>();
        lstEmp .Add(new Employees(1,"Emp 1"));
        lstEmp .Add(new Employees(2,"Emp 2"));
        lstEmp .Add(new Employees(3,"Emp 3"));
        lstEmp .Add(new Employees(4,"Emp 4"));
        lstEmp .Add(new Employees(5,"Emp 5"));
        lstEmp .Add(new Employees(6,"Emp 6"));
        lstEmp .Add(new Employees(7,"Emp 7"));
        lstEmp .Add(new Employees(8,"Emp 8"));
        lstEmp .Add(new Employees(9,"Emp 9"));
        lstEmp .Add(new Employees(10,"Emp 10"));
        lstEmp .Add(new Employees(11,"Emp 11"));
        lstEmp .Add(new Employees(12,"Emp 12"));
        lstEmp .Add(new Employees(13,"Emp 13"));
        lstEmp .Add(new Employees(14,"Emp 14"));
        lstEmp .Add(new Employees(15,"Emp 15"));
        lstEmp .Add(new Employees(16,"Emp 16"));
        lstEmp .Add(new Employees(17,"Emp 17"));
        lstEmp .Add(new Employees(18,"Emp 18"));
        lstEmp .Add(new Employees(19,"Emp 19"));
        lstEmp .Add(new Employees(20,"Emp 20"));

        return lstEmp ;
    }

    public static IEnumerable<EmployeeManager> EmpMgrList()
    {
        var lstEmpMgr = new List<EmployeeManager>
                                   {
                                       new EmployeeManager(1,18,19),
                                       new EmployeeManager(2,17,20),
                                       new EmployeeManager(3,19,17),
                                       new EmployeeManager(4,14,15),
                                       new EmployeeManager(5,13,15),
                                       new EmployeeManager(6,12,13),
                                       new EmployeeManager(7,9,13),
                                       new EmployeeManager(8,10,13),
                                       new EmployeeManager(9,11,13),
                                       new EmployeeManager(10,6,5), 
                                       new EmployeeManager(11,7,5), 
                                       new EmployeeManager(12,8,5), 
                                       new EmployeeManager(13,5,4), 
                                       new EmployeeManager(14,4,20), 
                                       new EmployeeManager(15,2,4), 
                                       new EmployeeManager(16,1,3), 
                                       new EmployeeManager(17,3,20)
                                   };
        return lstEmpMgr ;
    }

}
private void Form1_Load(object sender, EventArgs e)
    {
        //Displaying list of persons in the combo box
        var empList = EmpMgrData.EmpList();
        comboBox1.DataSource = empList;
        comboBox1.DisplayMember = "empName";
        comboBox1.ValueMember = "empId";
    }

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(comboBox1.DisplayMember))
        {
            listBox1.DataSource = null;
            listBox1.Items.Clear();
            var personKey = ((Employees)comboBox1.SelectedItem).empId;
            var personname = ((Employees)comboBox1.SelectedItem).empName;
            List<EmployeeManager> hierarchyDownEmployees = null;
            List<Employees> hierarchyDownEmployeesName = null;
            hierarchyDownEmployees = EmpMgrData.EmpMgrList().ToList();
            //Using an Extension method to get the hierarchy of employees for the selected person.First we find all the direct employees of selected person and  using the extension method, we will find the hierarchy                   
            List<int> hEmployees = new List<int>(hierarchyDownEmployees.GetHierarchyEmployees(personKey));
            for (int i = 0; i < hEmployees.Count; i++)
            {
                hEmployees.AddRange(hierarchyDownEmployees.GetHierarchyEmployees(hEmployees[i]).Except(hEmployees));
            }
            //Finding the EmpName of the hierarchy employees
            hierarchyDownEmployeesName = EmpMgrData.EmpList().Where(n => hEmployees.Any(s => s == n.empId)).ToList();

            //Displaying the Hierarchy Employee Names of selected person to the list box
            if (hierarchyDownEmployeesName != null && hierarchyDownEmployeesName.Count() > 0)
            {
                label2.Text = "All Employees under " + comboBox1.Text + " are: " + string.Join(", ", hEmployees);
                listBox1.DataSource = hierarchyDownEmployeesName;
                listBox1.DisplayMember = "empName";
                listBox1.ValueMember = "empId";
                listBox1.SelectedIndex = -1;
            }                
        }
    }
}
public static class Hierarchy
{
    //Extension method to get the Employee Hierarchy of the selected person
    public static IEnumerable<int> GetHierarchyEmployees(this IEnumerable<EmployeeManager> employees, int empID)
    {
        return from emp in employees
               where emp.mgr_id == empID
               select emp.emp_id ;
    }
}

当我在ComboBox中选择一个人时,我希望根据员工/经理关系显示层次结构中的员工列表('down'),直到没有员工向them.My代码报告的底层人员检索所选人员下的所有员工,但不按分层顺序检索。(当我从EmpList中找到员工名称时)

  • 示例:
  • Emp 20
  • 电磁脉冲3
  • 电磁脉冲1
  • 电磁脉冲4
  • 电磁脉冲5
  • Emp 6
  • Emp 7
  • Emp 8
  • 电磁脉冲2
  • 电磁脉冲17
  • Emp 19
  • 电磁脉冲18

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-06-02 18:22:10

因此,我认为一个更好的方法是修改一下扩展方法:

代码语言:javascript
运行
复制
public static IEnumerable<int> GetEmployees(this EmployeeManager mgr, int mgrID)
{
    return EmpMgrData.EmpMgrList()
        .Where(mgr => mgr.mgr_id = mgrID)
        .Select(mgr => mgr.emp_id);
}

然后修改EmployeeManager类以获得自己的员工:

代码语言:javascript
运行
复制
public class EmployeeManager
{
    public int empmgr_id { get; set; }
    public int emp_id { get; set; }
    public int mgr_id{ get; set; }

    public IEnumerable<int> Employees
    {
        get
        {
            return this.GetEmployees(emp_id);
        }
    }

    public EmployeeManager(int emid, int eid, int mid)
    {
        empmgr_id = emid;
        emp_id = eid;
        mgr_id= mid;
    }
}

最后,当一个人被选中时,你只需要得到那个EmployeeManager。现在它有自己的员工,员工也有自己的员工。该代码可能如下所示:

代码语言:javascript
运行
复制
var rootManager = EmpMgrData.EmpMgrList()
    .FirstOrDefault(mgr => mgr.emp_id = personKey);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24000634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档