组织结构图-按经理分组以显示其下的所有员工 [英] Organization Chart - Group by Manager to show all employees under him
本文介绍了组织结构图-按经理分组以显示其下的所有员工的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我写了下面的代码来显示员工-经理的报告,我按照分组来显示一位经理下的所有员工,但只显示了一位员工.我想念的是什么?
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屋!
查看全文