平面数据的层次结构
问题描述:
我有一个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
答
您可以通过创建所有的员工对象的列表和设置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);
}
答
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();
}
答
我得到的灵感来自这篇文章前一段时间(我不得不改变它稍微适合我的目的)。它基本上建立了一个等级结构到第n级。
可能是有用的,哪怕只是打折的方式在自己的情况下:-)
你以建立层次试过什么?你可以发布你的代码和你遇到的问题吗? – Oded 2011-01-31 19:55:40
你的问题是什么?员工的孩子对什么有什么要求? – Qwertie 2011-01-31 19:56:20