我的员工类有employeeId(int),parent(int)和children属性List<Employee>
。我以正确的顺序从获取数据库中的员工列表,现在需要构建层次结构,但我失败了......我知道这是编程101,但我很难与它
public class Employee
{
public int EmployeeId { get; set;}
public int ParentId;{ get; set;}
public List<Employee> Children; { get; set;}
}
数据示例
EmployeeId, ManagerId
1, 0 //no one
2, 1
3, 1
4, 2
5, 2
6, 3
7, 3
答案 0 :(得分:2)
List<Employee> allEmployees = new List<Employee>();
allEmployees.AddRange(LoadAllEmployees()); // pull from DB in flat format
foreach (var employee in allEmployees)
{
employee.Children = allEmployees.Where(e => e.ParentId == employee.EmployeeId).ToList();
}
答案 1 :(得分:1)
您可以首先创建所有员工对象的列表,然后设置EmployeeId
和ParentId
属性。如果您还将它们放在由EmployeeId
键入的字典中,则可以在之后检索每个字母以添加到Children
集合:
List<Employee> employees = new List<Employee>();
Dictionary<int,Employee> dict = new Dictionary<int,Employee>();
foreach(result from database query)
{
Employee employee = new Employee();
employee.EmployeeId = result["EmployeeId"];
employee.ParentId = result["ParentId"];
employees.Add(employee);
dict.Add(employee.EmployeeId, employee);
}
foreach(Employee e in employees)
{
dict[e.ParentId].Children.Add(e);
}
答案 2 :(得分:1)
我刚才从这篇文章中得到了灵感(我必须稍微改一下才能达到我的目的)。它基本上构建了一个到n度的层次结构。
可能有用,即使只是为了在自己的情况下折扣它的方法: - )