コード例 #1
0
 private void GetCodeList(RegionTreeNode tree, List <RegionTreeNode> codeList)
 {
     foreach (var node in tree.Children)
     {
         codeList.Add(new RegionTreeNode()
         {
             Id = node.Id, RegionCode = node.RegionCode
         });
         GetCodeList(node, codeList);
     }
 }
コード例 #2
0
 private RegionTreeNode RegionTreeNodeClone(RegionTreeNode node)
 {
     return(new RegionTreeNode
     {
         Id = node.Id,
         ParentId = node.ParentId,
         Name = node.Name,
         DisplayOrder = node.DisplayOrder,
         Initial = node.Initial,
         Initials = node.Initials,
         Pinyin = node.Pinyin,
         Extra = node.Extra,
         Suffix = node.Suffix,
         ZipCode = node.ZipCode,
         RegionCode = node.RegionCode,
         HasChildren = node.HasChildren,
         Children = node.Children,
     });
 }
コード例 #3
0
 /// <summary>
 /// 查询交汇点节点
 /// </summary>
 /// <param name="intersection"></param>
 /// <returns></returns>
 private RegionTreeNode GetIntersectionChild(RegionTreeNode tree, long intersection)
 {
     if (tree.Id == intersection)
     {
         return(tree);
     }
     //保证节点遍历完
     foreach (var node in tree.Children)
     {
         if (node.Id == intersection)
         {
             return(node);
         }
     }
     foreach (var node in tree.Children)
     {
         return(GetIntersectionChild(node, intersection));
     }
     return(null);
 }
コード例 #4
0
 private void RegionTreeAddChildren(List <RegionInfo> regions, RegionTreeNode node)
 {
     for (var i = 0; i < regions.Count; i++)
     {
         var item = regions[i];
         if (item.ParentId == node.Id)
         {
             if (node.Children == null)
             {
                 node.Children = new List <RegionTreeNode>();
             }
             var child = RegionTreeNodeFromRegion(item);
             // 在父节点的 ParentIdPath 基础上增加 ParentId
             child.ParentIdPath = node.ParentIdPath != null ? new List <int>(node.ParentIdPath) : new List <int>(1);
             child.ParentIdPath.Add(node.Id);
             node.Children.Add(child);
             RegionTreeAddChildren(regions, child);
         }
     }
 }
コード例 #5
0
        /// <summary>
        /// 查询两棵树的交汇点(最低的子节点)
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="isExistTree"></param>
        /// <returns></returns>
        private long GetIntersection(RegionTreeNode tree, RegionTreeNode isExistTree)
        {
            var treeCodeList = new List <RegionTreeNode>();

            treeCodeList.Add(new RegionTreeNode()
            {
                Id = tree.Id, RegionCode = tree.RegionCode
            });
            GetCodeList(tree, treeCodeList);
            var isExistTreeCodeList = new List <RegionTreeNode>();

            isExistTreeCodeList.Add(new RegionTreeNode()
            {
                Id = isExistTree.Id, RegionCode = isExistTree.RegionCode
            });
            GetCodeList(isExistTree, isExistTreeCodeList);

            //查询重复的,最大的code
            var intersectCodeList = (from t in treeCodeList
                                     from i in isExistTreeCodeList
                                     where t.Id == i.Id
                                     select t).ToList();
            var target = new RegionTreeNode()
            {
                RegionCode = ""
            };

            foreach (var code in intersectCodeList)
            {
                //不同层级依次添加编码
                //eg.湖北省为42,武汉市为4201,汉阳区为420105
                //这里寻找子节点
                if (target.RegionCode.Length < code.RegionCode.Length)
                {
                    target = code;
                }
            }
            return(target.Id);
        }
コード例 #6
0
        private async Task <RegionTreeNode> GetTree(RegionTree d)
        {
            RegionTreeNode    tree = new RegionTreeNode();
            List <RegionTree> list = new List <RegionTree>();
            //向上查询树
            var parent = await db.Regions.FirstOrDefaultAsync(x => x.RegionCode == d.RegionParentCode);

            list.Add(d);
            if (parent != null)
            {
                list.Add(parent);
            }
            int count = 0;     //防止死循环

            while (parent != null && count < 5)
            {
                parent = await db.Regions.FirstOrDefaultAsync(x => x.RegionCode == parent.RegionParentCode);

                if (parent != null)
                {
                    list.Add(parent);
                }
                count++;
            }
            //处理成树结构
            tree          = ConvertToTreeNode(list[list.Count - 1]);
            tree.Children = new List <RegionTreeNode>();
            var node = tree.Children;

            for (int i = list.Count - 2; i >= 0; i--)
            {
                var t = ConvertToTreeNode(list[i]);
                node.Add(t);
                node[0].Children = new List <RegionTreeNode>();
                node             = node[0].Children;
            }
            return(tree);
        }
コード例 #7
0
ファイル: RegionService.cs プロジェクト: winlee/Tubumu
        private RegionTreeNode FindRegion(List <RegionTreeNode> regions, int regionId)
        {
            RegionTreeNode region = null;

            foreach (var node in regions)
            {
                if (node.Id == regionId)
                {
                    region = node;
                    break;
                }
                else if (node.HasChildren && node.Children != null && node.Children.Count > 0)
                {
                    var child = FindRegion(node.Children, regionId);
                    if (child != null)
                    {
                        region = child;
                        break;
                    }
                }
            }

            return(region);
        }