在开发过程中,经常会遇到需要处理树形结构的情况,如前端需要以树形结构展示组织架构树(部门树),需要返回的格式如下所示:
[{
label: '一级 1',
children: [{
label: '二级 1-1',
children: [{
label: '三级 1-1-1'
}]
}]
}, {
label: '一级 2',
children: [{
label: '二级 2-1',
children: [{
label: '三级 2-1-1'
}]
}, {
label: '二级 2-2',
children: [{
label: '三级 2-2-1'
}]
}]
}, {
label: '一级 3',
children: [{
label: '二级 3-1',
children: [{
label: '三级 3-1-1'
}]
}, {
label: '二级 3-2',
children: [{
label: '三级 3-2-1'
}]
}]
}]
此处后端以.net的firstcode方式来处理;
1、新建实体类
public partial class Department
{
public int Id { get; set; }
public string Departmentname { get; set; } = null!;
public int Pid { get; set; }
public List<Department> children { get; set; }
}
2、完成数据库表结构映射与注入;具体步骤:略
3、新建递归函数
/// <summary>
/// 递归
/// </summary>
/// <param name="pid">父级Id</param>
/// <param name="demos">数据源</param>
/// <returns></returns>
private List<Department> GetMenu(int pid, List<Department> departments)
{
/*
思路:1.从数据源中找到父级
2.循环父级并赋值,再循环父级时查找子集
3.如果有子集调用用GetMenu(父级Id,数据源)方法一层一层向下找
*/
var parent = departments.Where(P => P.Pid == pid);
List<Department> lists = new List<Department>();
foreach (var item in parent)
{
Department Childer = new Department();
Childer.Id = item.Id;
Childer.Departmentname = item.Departmentname;
Childer.Pid = item.Pid;
Childer.children = GetSon(Childer, departments);
lists.Add(Childer);
}
/// <summary>
/// 找子集有就返回NUll,并执行Add
/// </summary>
/// <param name="demos">父级Id</param>
/// <param name="demos