博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tree状数据叶子节点与根节点等的递归转换
阅读量:6999 次
发布时间:2019-06-27

本文共 2161 字,大约阅读时间需要 7 分钟。

做项目时经常遇到树状层级数据。从各个层级数据的转换查询等。场景如行业类别的多层级,行政区层级,检查项类别层级等等。

数据结构如  Id Name ParentId

#region area树状节点的转化        public List ConvertToLeafChildAreas(List
areaIds) { var allAreas = GetNewAreas().ToList(); List
leafChildren = new List
(); foreach (var areaId in areaIds) { leafChildren.AddRange(GetLeafChildAreas(areaId, allAreas)); } return leafChildren; } ///
/// 根据父ID获取所有的最小地区 /// ///
///
///
public List
GetLeafChildAreas(int parentId,List
allAreas) { List
leafChildren = new List
(); var sons = allAreas.Where(o => o.ParentId == parentId).ToList(); if (sons.Any()) { foreach (var item in sons) { leafChildren.AddRange(GetLeafChildAreas(item.Id, allAreas)); } } else { var currentArea = allAreas.FirstOrDefault(m=>m.Id== parentId); leafChildren.Add(currentArea); } return leafChildren; } public List
ConvertToRootAreas(List
childAreaIds) { var allAreas = GetNewAreas().ToList(); var childAreas = allAreas.Where(m => childAreaIds.Contains(m.Id)).ToList(); List
root = new List
(); foreach (var childArea in childAreas) { root.Add(GetRootArea(childArea, allAreas)); } return root.Distinct().ToList(); } ///
/// 根据子ID获取所有的最顶级地区 /// ///
///
///
public Area GetRootArea(Area childArea, List
allAreas) { var parentArea = allAreas.FirstOrDefault(o => o.Id == childArea.ParentId); if (parentArea==null) return childArea; return GetRootArea(parentArea,allAreas); } #endregion

  

转载于:https://www.cnblogs.com/taoshengyujiu/p/10061819.html

你可能感兴趣的文章