组织结构图-按经理分组以显示其下的所有员工 [英] Organization Chart - Group by Manager to show all employees under him

查看:45
本文介绍了组织结构图-按经理分组以显示其下的所有员工的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了下面的代码来显示员工-经理的报告,我按照分组来显示一位经理下的所有员工,但只显示了一位员工.我想念的是什么?

I have written below code to display employee-manager reporting, i have group by so that all employees under one manager should be shown, but it is showing only 1 employee. what i am missing ?

LINQ按逻辑分组-

LINQ Group By Logic-

var emp = (from m in employee
                       group m by m.ManagerId into g
                       join e1 in employee on g.FirstOrDefault().ManagerId equals e1.EmpId into temp
                       from t1 in temp.DefaultIfEmpty()                       
                       select new 
                       {
                           EmpId = g.FirstOrDefault().EmpId,
                           EmployeeName = g.FirstOrDefault().EmployeeName,
                           Gender = g.FirstOrDefault().Gender,
                           ManagerId = t1?.ManagerId ?? 0  ,
                           ManagerName = t1?.EmployeeName ?? "Top of the Chain",
                           Designation = g.FirstOrDefault().Designation
                       }).ToList();

我已经如下添加了AddEmployee()和RemoveEmployee()的实现并按如下所示进行调用,但是Removeemployee不会从层次结构中删除员工?

I have added implementation of AddEmployee() and RemoveEmployee() as below and calling as below, but Removeemployee does not remove employee from hierarchy ??

employee.Add(new Employee { EmpId = 11, EmployeeName = "Chris Harris", Gender = 'M', ManagerId = 7, Designation = "Executive" });
            employee.Add(new Employee { EmpId = 13, EmployeeName = "Rocky Balbo", Gender = 'M', ManagerId = null, Designation = "CEO" });

            int? ceo = null;

            AddEmployee(new Employee { EmpId = 2, EmployeeName = "Rohan Kumar", Gender = 'M', ManagerId = 13, Designation = "Application Architect"  });
            AddEmployee(new Employee { EmpId = 1, EmployeeName = "Mohan Kumar", Gender = 'M', ManagerId = 2, Designation = "Tech Lead" });
            RemoveEmployee(new Employee { EmpId = 9, EmployeeName = "Rogger Binny", Gender = 'M', ManagerId = 7, Designation = "Sales Executive" });
            GetHierarchy(ceo, 0, "");

   static void AddEmployee(Employee empDetails)
        {
            employee.Add(empDetails);
        }

        static void RemoveEmployee(Employee empDetails)
        {
            employee.Remove(empDetails);
        } 


public class Employee
    {
        public int EmpId { get; set; }
        public string EmployeeName { get; set; }
        public char Gender { get; set; }
        public int? ManagerId { get; set; }
        public string Designation { get; set; }
        public string ManagerName { get; set; }
    }

List<Employee> employee = new List<Employee>();
            employee.Add(new Employee { EmpId = 3, EmployeeName = "Andrea Ely", Gender = 'F', ManagerId = 6, Designation = "Tech Head"});
            employee.Add(new Employee { EmpId = 4, EmployeeName = "John Eward", Gender = 'M', ManagerId = 3, Designation = "General" });
            employee.Add(new Employee { EmpId = 5, EmployeeName = "Lesli Mac", Gender = 'F', ManagerId = 3, Designation = "Staff" });
            employee.Add(new Employee { EmpId = 6, EmployeeName = "Satinder Singh", Gender = 'M', ManagerId = 13, Designation = "President" });
            employee.Add(new Employee { EmpId = 7, EmployeeName = "Amit Sarna", Gender = 'M', ManagerId = 13, Designation = "Vice President" });
            employee.Add(new Employee { EmpId = 8, EmployeeName = "David Steward", Gender = 'M', ManagerId = 7, Designation = "General" });
            employee.Add(new Employee { EmpId = 9, EmployeeName = "Rogger Binny", Gender = 'M', ManagerId = 7, Designation = "Sales Executive" });
            employee.Add(new Employee { EmpId = 10, EmployeeName = "Emy jackson", Gender = 'F', ManagerId = 7, Designation = "Sales Executive" });
            employee.Add(new Employee { EmpId = 11, EmployeeName = "Chris Harris", Gender = 'M', ManagerId = 7, Designation = "Executive" });
            employee.Add(new Employee { EmpId = 13, EmployeeName = "Rocky Balbo", Gender = 'M', ManagerId = null, Designation = "CEO" });

var emp = (from m in employee
                       group m by m.ManagerId into g
                       join e1 in employee on g.FirstOrDefault().ManagerId equals e1.EmpId into temp
                       from t1 in temp.DefaultIfEmpty()                       
                       select new 
                       {
                           EmpId = g.FirstOrDefault().EmpId,
                           EmployeeName = g.FirstOrDefault().EmployeeName,
                           Gender = g.FirstOrDefault().Gender,
                           ManagerId = t1?.ManagerId ?? 0  ,
                           ManagerName = t1?.EmployeeName ?? "Top of the Chain",
                           Designation = g.FirstOrDefault().Designation
                       }).ToList();

            Console.WriteLine("--------------Printing Manager-Employee Hierarchy-------------");
            foreach (var empDetails in emp)
            {               
                Console.WriteLine("Emp Name is {0} ManagerName is {1}", empDetails.EmployeeName, empDetails.ManagerName);                
            }

推荐答案

使用递归算法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static List<Employee> employees;
        static void Main(string[] args)
        {
            employees = new List<Employee>();
            employees.Add(new Employee { EmpId = 3, EmployeeName = "Andrea Ely", Gender = 'F', ManagerId = 6, Designation = "Tech Head"});
            employees.Add(new Employee { EmpId = 4, EmployeeName = "John Eward", Gender = 'M', ManagerId = 3, Designation = "General" });
            employees.Add(new Employee { EmpId = 5, EmployeeName = "Lesli Mac", Gender = 'F', ManagerId = 3, Designation = "Staff" });
            employees.Add(new Employee { EmpId = 6, EmployeeName = "Satinder Singh", Gender = 'M', ManagerId = 13, Designation = "President" });
            employees.Add(new Employee { EmpId = 7, EmployeeName = "Amit Sarna", Gender = 'M', ManagerId = 13, Designation = "Vice President" });
            employees.Add(new Employee { EmpId = 8, EmployeeName = "David Steward", Gender = 'M', ManagerId = 7, Designation = "General" });
            employees.Add(new Employee { EmpId = 9, EmployeeName = "Rogger Binny", Gender = 'M', ManagerId = 7, Designation = "Sales Executive" });
            employees.Add(new Employee { EmpId = 10, EmployeeName = "Emy jackson", Gender = 'F', ManagerId = 7, Designation = "Sales Executive" });
            employees.Add(new Employee { EmpId = 11, EmployeeName = "Chris Harris", Gender = 'M', ManagerId = 7, Designation = "Executive" });
            employees.Add(new Employee { EmpId = 13, EmployeeName = "Rocky Balbo", Gender = 'M', ManagerId = null, Designation = "CEO" });

            int? ceo = null;
            GetHierarchy(ceo, 0, "");

        }
        static void GetHierarchy(int? managerID, int level, string managerName)
        {
            List<Employee> group = employees.Where(x => x.ManagerId  == managerID).ToList();
            foreach (Employee empDetails in group)
            {
                Console.WriteLine("{0}Emp Name is {1} ManagerName is {2}", new string(' ', 5 * level), empDetails.EmployeeName, managerName);
                GetHierarchy(empDetails.EmpId, level + 1, empDetails.EmployeeName);
            }
        }
    }
    public class Employee
    {
        public int EmpId { get; set; }
        public string EmployeeName { get; set; }
        public char Gender { get; set; }
        public int? ManagerId { get; set; }
        public string Designation { get; set; }
        public string ManagerName { get; set; }
    }


}

这篇关于组织结构图-按经理分组以显示其下的所有员工的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆