4、有一张部门表,无限层级,父子之间的关系是通过id和pid来关联的,假设给定的id是100,请写一个递归方法,查上下级通过参数区分 ①请找出100的所有上级部门 ②请找出100的所有下级部门
假设部门表如下:
| id | name | pid |
|----|------|-----|
| 100| 部门A| 0 |
| 101| 部门B| 100 |
| 102| 部门C| 101 |
| 103| 部门D| 101 |
则可以编写递归方法来查找100的上下级部门。
① 找出100的所有上级部门
```csharp
public static List<Department> GetParentDepartments(int id, List<Department> departments)
{
var parentDepartments = new List<Department>();
var department = departments.FirstOrDefault(d => d.Id == id);
if (department != null && department.Pid != 0)
{
var parentDepartment = departments.FirstOrDefault(d => d.Id == department.Pid);
if (parentDepartment != null)
{
parentDepartments.Add(parentDepartment);
parentDepartments.AddRange(GetParentDepartments(parentDepartment.Id, departments));
}
}
return parentDepartments;
}
```
这里首先根据id获取到指定的部门,然后判断该部门是否有父级部门(即pid != 0)。如果存在父级部门,则递归查找父级部门及其所有上级部门,并将它们添加到结果列表中。
② 找出100的所有下级部门
```csharp
public static List<Department> GetChildDepartments(int id, List<Department> departments)
{
var childDepartments = new List<Department>();
var tempDepartments = departments.Where(d => d.Pid == id).ToList();
childDepartments.AddRange(tempDepartments);
foreach (var department in tempDepartments)
{
childDepartments.AddRange(GetChildDepartments(department.Id, departments));
}
return childDepartments;
}
```
这里首先根据id获取到指定的部门,然后查找该部门的所有子部门,并将它们添加到结果列表中。接着,对于每个子部门,递归查找其所有子部门,并将它们添加到列表中。最后返回结果列表。
注意,上面代码中的Department类需要根据实际情况进行定义。