2020-01-08 15:34:46 版本 : 组织结构树-父子级 之 “递归的使用”
作者: 陈一奇 于 2020年01月08日 发布在分类 / 人防组 / 人防后端 下,并于 2020年01月08日 编辑
 历史版本

修改日期 修改人 备注
2020-01-08 15:35:08[当前版本] 陈一奇 格式调整
2020-01-08 15:34:46 陈一奇 创建版本

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


    }
历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp