2011-01-31 104 views
1

我有一个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

你以建立层次试过什么?你可以发布你的代码和你遇到的问题吗? – Oded 2011-01-31 19:55:40

+0

你的问题是什么?员工的孩子对什么有什么要求? – Qwertie 2011-01-31 19:56:20

回答

1

您可以通过创建所有的员工对象的列表和设置EmployeeIdParentId性质开始。如果你也把他们在一本字典,通过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
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

我得到的灵感来自这篇文章前一段时间(我不得不改变它稍微适合我的目的)。它基本上建立了一个等级结构到第n级。

可能是有用的,哪怕只是打折的方式在自己的情况下:-)

http://www.scip.be/index.php?Page=ArticlesNET23&Lang=EN