組織結構樹-父子級(遞歸的使用)


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


    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM