组织结构树-父子级(递归的使用)

/// <summary>
 /// 组织部门
 /// </summary>

    public class ArchvieOrganizationAppService : RunGoAppServiceBase<Model.Archvie_Organization, DetailArchvieOrganizationDto, string, PagedArchvieOrganizationDto, CreateArchvieOrganizationDto, UpdateArchvieOrganizationDto>, IArchvieOrganizationAppService
    {
        private readonly TenantIdConfig _tenantIdConfig;
        private IRepository<Model.Archvie_Organization, string> _repository;
        public ArchvieOrganizationAppService(TenantIdConfig tenantIdConfig, IRepository<Model.Archvie_Organization, string> repository) : base(repository)
        {
            _tenantIdConfig = tenantIdConfig;
            _repository = repository;
        }
        public List<OrganizeTree> Main = new List<OrganizeTree>();
        #region
        /// <summary>
        /// 获取组织部门结构树
        /// </summary>
        /// <returns></returns>
        public Task<List<OrganizeTree>> GetOrganizationTree() {
            try
            {
                List<OrganizeTree> children = new List<OrganizeTree>();
               List<OrganizeTree>allMenu = _repository.GetAllList().Select(e => new OrganizeTree { Id = e.Id, Name = e.Name, SuperiorRowGuid = e.SuperiorRowGuid ,ChildItems=children}).ToList(); //得到数据 

                Main.Add(allMenu.Where(x => x.SuperiorRowGuid ==  null || x.SuperiorRowGuid == "").FirstOrDefault());//根节点
                //递归
                AddMenu(allMenu, allMenu.Where(x => x.SuperiorRowGuid == null || x.SuperiorRowGuid == "").FirstOrDefault());
                //结果树形结构
                List<OrganizeTree> treeMenu = Main;
                return Task.FromResult(treeMenu);
            }
            catch (Exception e)
            {
                throw new UserFriendlyException(e.Message);
            }
        }
        #endregion
        //父子级递归
        public void AddMenu(List<OrganizeTree> all, OrganizeTree curItem)
        {
            List<OrganizeTree> childItems = all.Where(ee => ee.SuperiorRowGuid == curItem.Id).ToList(); //得到子节点
                 curItem.ChildItems = childItems; //将子节点加入
                //遍历子节点,进行递归,寻找子节点的子节点
                foreach (var subItem in childItems)
                {
                    AddMenu(all, subItem);
                }
            }
         
        }






public class OrganizeTree
    {
        /// <summary>
        /// 部门唯一标识
        /// </summary>
        public string Id { get; set; }

        /// <summary>
        /// 父级部门名称
        /// </summary>
        [StringLength(50)]
        public string Name { get; set; }
     
        /// <summary>
        /// 上级部门唯一标识
        /// </summary>
        [StringLength(50)]
        public string SuperiorRowGuid { get; set; }
        /// <summary>
        /// 子部门
        /// </summary>
        public List<OrganizeTree> ChildItems { get; set; }


    }
原文地址:https://www.cnblogs.com/cyqdeshenluo/p/12166927.html