平面数据的层次结构

我有一个employee类,它有employeeId(int),parent(int)和children属性List 。 我以正确的顺序从数据库中获取员工列表,现在需要构建层次结构 ,但我失败了……我知道这是编程101,但我很难用它。

 public class Employee { public int EmployeeId { get; set;} public int ParentId;{ get; set;} public List Children; { get; set;} } 

数据示例

 EmployeeId, ManagerId 1, 0 //no one 2, 1 3, 1 4, 2 5, 2 6, 3 7, 3 

您可以从创建所有员工对象的列表并设置EmployeeIdParentId属性开始。 如果你也把它们放在一个由EmployeeId键入的字典中,你可以在之后检索每个父类的父元素以添加到Children集合中:

 List employees = new List(); Dictionary dict = new Dictionary(); 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); } 
 List allEmployees = new List(); allEmployees.AddRange(LoadAllEmployees()); // pull from DB in flat format foreach (var employee in allEmployees) { employee.Children = allEmployees.Where(e => e.ParentId == employee.EmployeeId).ToList(); } 

我刚才从这篇文章中得到了灵感(我必须稍微改一下才能达到我的目的)。 它基本上建立了第n级的层次结构。

可能有用,即使只是为了在自己的情况下折扣它的方法:-)

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