大家來找茬---樹的遍歷
阿新 • • 發佈:2022-12-12
1 /// <summary> 2 /// 給定一個組織Id,查找出這個組織的樹結構(含崗位) 3 /// </summary> 4 /// <param name="organizationId">組織Id</param> 5 /// <returns>結果</returns> 6 public async Task<WebOrganizationTreeOutput> GetChilderPostion(string organizationId)7 { 8 // 查詢全部子集的崗位 9 var organizationList = await WebOrganizationListSearch(); 10 Func<string, List<WebOrganizationTreeOutput>, WebOrganizationTreeOutput> func = null; 11 func = (organizationId, list) => 12 { 13 if(list == null) 14 { 15 return null; 16 } 17 18 foreach (var item in list) 19 { 20 if (item.OrganizationId == organizationId) 21 { 22 return item; 23 }24 else if(item.OrganizationLevel > 0 && item.Childrens != null && item.Childrens.Count > 0) 25 { 26 return func(organizationId, item.Childrens); 27 } 28 } 29 30 return null; 31 }; 32 33 return func(organizationId, organizationList); 34 }
資料的結構
1 /// <summary> 2 /// 組織架構目錄 3 /// </summary> 4 public class WebOrganizationTreeOutput 5 { 6 /// <summary> 7 /// Id 8 /// </summary> 9 public string OrganizationId { get; set; } 10 11 /// <summary> 12 /// 組織名稱 13 /// </summary> 14 public string OrganizationName { get; set; } 15 16 /// <summary> 17 /// 組織架構級別,預設從1開始 18 /// </summary> 19 public int OrganizationLevel { get; set; } 20 21 /// <summary> 22 /// 代表數量 23 /// </summary> 24 public int UserCount { get; set; } 25 26 /// <summary> 27 /// 父級組織架構ID 28 /// </summary> 29 public string? ParentOrganizationId { get; set; } 30 31 /// <summary> 32 /// 下級 33 /// </summary> 34 public List<WebOrganizationTreeOutput> Childrens { get; set; } 35 36 /// <summary> 37 /// 組織崗位 38 /// </summary> 39 public List<WebOrganizationPositionOutput> Position { get; set; } 40 41 /// <summary> 42 /// 獲取樹的全部崗位 43 /// </summary> 44 /// <returns>結果</returns> 45 public List<string> GetTreeAllPosition() 46 { 47 List<string> list = new List<string>(); 48 if (Position != null) 49 { 50 list.AddRange(Position.Select(p => p.PositionId)); 51 } 52 53 Func<List<WebOrganizationTreeOutput>, List<string>> func = null; 54 func = (input) => 55 { 56 List<string> result = new List<string>(); 57 foreach (var item in input) 58 { 59 if (item.Position != null) 60 { 61 result.AddRange(item.Position.Select(p => p.PositionId)); 62 } 63 64 if (item.Childrens != null) 65 { 66 result.AddRange(func(item.Childrens)); 67 } 68 } 69 70 return result; 71 }; 72 73 if (Childrens != null) 74 { 75 list.AddRange(func(Childrens)); 76 } 77 78 return list; 79 } 80 }