TreeDataMake.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System.Collections.Generic;
  2. namespace WMS.Util
  3. {
  4. /// <summary>
  5. /// 描 述:树结构数据
  6. /// </summary>
  7. public static class TreeDataMake
  8. {
  9. /// <summary>
  10. /// 树形数据转化
  11. /// </summary>
  12. /// <param name="list">数据</param>
  13. /// <returns></returns>
  14. public static List<TreeModel> ToTree(this List<TreeModel> list,string parentId = "")
  15. {
  16. Dictionary<string, List<TreeModel>> childrenMap = new Dictionary<string, List<TreeModel>>();
  17. Dictionary<string, TreeModel> parentMap = new Dictionary<string, TreeModel>();
  18. List<TreeModel> res = new List<TreeModel>();
  19. //首先按照
  20. foreach (var node in list)
  21. {
  22. node.hasChildren = false;
  23. node.complete = true;
  24. // 注册子节点映射表
  25. if (!childrenMap.ContainsKey(node.parentId))
  26. {
  27. childrenMap.Add(node.parentId, new List<TreeModel>());
  28. }
  29. else if (parentMap.ContainsKey(node.parentId))
  30. {
  31. parentMap[node.parentId].hasChildren = true;
  32. }
  33. childrenMap[node.parentId].Add(node);
  34. // 注册父节点映射节点表
  35. parentMap.Add(node.id, node);
  36. // 查找自己的子节点
  37. if (!childrenMap.ContainsKey(node.id))
  38. {
  39. childrenMap.Add(node.id, new List<TreeModel>());
  40. }
  41. else
  42. {
  43. node.hasChildren = true;
  44. }
  45. node.ChildNodes = childrenMap[node.id];
  46. }
  47. if (string.IsNullOrEmpty(parentId))
  48. {
  49. // 获取祖先数据列表
  50. foreach (var item in childrenMap)
  51. {
  52. if (!parentMap.ContainsKey(item.Key))
  53. {
  54. res.AddRange(item.Value);
  55. }
  56. }
  57. }
  58. else {
  59. if (childrenMap.ContainsKey(parentId))
  60. {
  61. return childrenMap[parentId];
  62. }
  63. else {
  64. return new List<TreeModel>();
  65. }
  66. }
  67. return res;
  68. }
  69. /// <summary>
  70. /// 树形数据转化
  71. /// </summary>
  72. /// <param name="list">数据</param>
  73. /// <returns></returns>
  74. public static List<TreeModelEx<T>> ToTree<T>(this List<TreeModelEx<T>> list) where T : class
  75. {
  76. Dictionary<string, List<TreeModelEx<T>>> childrenMap = new Dictionary<string, List<TreeModelEx<T>>>();
  77. Dictionary<string, TreeModelEx<T>> parentMap = new Dictionary<string, TreeModelEx<T>>();
  78. List<TreeModelEx<T>> res = new List<TreeModelEx<T>>();
  79. //首先按照
  80. foreach (var node in list)
  81. {
  82. // 注册子节点映射表
  83. if (!childrenMap.ContainsKey(node.parentId))
  84. {
  85. childrenMap.Add(node.parentId, new List<TreeModelEx<T>>());
  86. }
  87. childrenMap[node.parentId].Add(node);
  88. // 注册父节点映射节点表
  89. parentMap.Add(node.id, node);
  90. // 查找自己的子节点
  91. if (!childrenMap.ContainsKey(node.id))
  92. {
  93. childrenMap.Add(node.id, new List<TreeModelEx<T>>());
  94. }
  95. node.ChildNodes = childrenMap[node.id];
  96. }
  97. // 获取祖先数据列表
  98. foreach (var item in childrenMap)
  99. {
  100. if (!parentMap.ContainsKey(item.Key))
  101. {
  102. res.AddRange(item.Value);
  103. }
  104. }
  105. return res;
  106. }
  107. }
  108. }