平面数据的层次结构

时间:2011-01-31 19:52:37

标签: c# hierarchy

我的员工类有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

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)

您可以首先创建所有员工对象的列表,然后设置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 :(得分:1)

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

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

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