Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 平面数据的层次结构_C#_Hierarchy - Fatal编程技术网

C# 平面数据的层次结构

C# 平面数据的层次结构,c#,hierarchy,C#,Hierarchy,我有一个employeeId int、parentint和children属性列表的employee类。我以正确的顺序从数据库中获取员工列表,现在需要构建层次结构,但我失败得很惨……我知道这是编程101,但我很难做到这一点 public class Employee { public int EmployeeId { get; set;} public int ParentId;{ get; set;} public List<Employee> Children; {

我有一个employeeId int、parentint和children属性列表的employee类。我以正确的顺序从数据库中获取员工列表,现在需要构建层次结构,但我失败得很惨……我知道这是编程101,但我很难做到这一点

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

}

首先,可以创建所有employee对象的列表,并设置EmployeeId和ParentId属性。如果您还将它们放在由EmployeeId键入的字典中,则可以检索它们的父项,以添加到子集合:

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);
}

首先,可以创建所有employee对象的列表,并设置EmployeeId和ParentId属性。如果您还将它们放在由EmployeeId键入的字典中,则可以检索它们的父项,以添加到子集合:

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);
}

不久前,我从这篇文章中得到了灵感,我不得不稍微修改它以适应我的目的。它基本上建立了n级的等级结构

可能有用,即使只是在您自己的情况下打折:-


不久前,我从这篇文章中得到了灵感,我不得不稍微修改它以适应我的目的。它基本上建立了n级的等级结构

可能有用,即使只是在您自己的情况下打折:-



为了建立层次结构,您尝试了什么?你能发布你的代码和你遇到的问题吗?你的问题是什么?该员工的子女与此有什么关系?@Qwertie-他想知道如何在存储在数据库中的C中填充正确的层次结构。@Oded,我尝试跟踪父id,并在父id与当前项目的父id相同时添加子女,但在进入2+级时失败。@Qwertie,我将问题改为粗体。为了建立层次结构,您尝试了什么?你能发布你的代码和你遇到的问题吗?你的问题是什么?该员工的子女与此有什么关系?@Qwertie-他想知道如何在存储在数据库中的C中填充正确的层次结构。@Oded,我尝试跟踪父id,并在父id与当前项目的父id相同时添加子女,但在进入2+级时失败。@Qwertie,我将问题改为粗体。唯一的问题是我的字典最终包含了所有项目和层次结构数据。因此,如果我的db列表包含13个项目,我最终会得到13个项目,然后其中一些项目有子项…而不是说4个项目有9个子项。这有意义吗?字典只用于查找要添加到Children集合的ParentId。一旦构建了层次结构,您就可以完全忘记字典了。如果您只需要层次结构的根,那么只需保留对每个顶级员工的引用,您可以通过子集合访问其余员工。这是有道理的,但我如何知道层次结构中哪些是顶级父级?如果所有顶级员工的ParentId为零,然后在遍历员工列表时选择这些,例如,如果e.ParentId==0 topLevelEmployees.Adde;唯一的问题是我的字典最终包含了所有的条目和层次数据。因此,如果我的db列表包含13个项目,我最终会得到13个项目,然后其中一些项目有子项…而不是说4个项目有9个子项。这有意义吗?字典只用于查找要添加到Children集合的ParentId。一旦构建了层次结构,您就可以完全忘记字典了。如果您只需要层次结构的根,那么只需保留对每个顶级员工的引用,您可以通过子集合访问其余员工。这是有道理的,但我如何知道层次结构中哪些是顶级父级?如果所有顶级员工的ParentId为零,然后在遍历员工列表时选择这些,例如,如果e.ParentId==0 topLevelEmployees.Adde;
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);
}