예제 #1
0
        /// <summary>
        /// 从当前节点生成树
        /// </summary>
        public AgentTreeModel GetTree(string user, List <string> leafNodes)
        {
            AgentTreeModel root = new AgentTreeModel(user);

            //所有的叶子节点
            if (leafNodes == null || leafNodes.Count == 0)
            {
                leafNodes = _agentTreeRepository.TableNoTracking
                            .GroupBy(g => g.Ancestor).Where(x => x.Count() == 1)
                            .Select(x => x.Key).Distinct().ToList();
            }
            var tree = GetChildren(root, leafNodes);

            return(tree);
        }
예제 #2
0
        /// <summary>
        /// 递归向下遍历
        /// </summary>
        /// <param name="user"></param>
        /// <param name="tree"></param>
        private AgentTreeModel GetChildren(AgentTreeModel root, List <string> leafNodes)
        {
            //查找直属下级
            var children = _agentTreeRepository.TableNoTracking
                           .Where(x => x.Ancestor == root.UserName && x.Distance == 1)
                           .OrderBy(x => x).Distinct()
                           .Select(x => new AgentTreeModel(x.Descendant));

            root.Children = children.ToList();
            foreach (var child in root.Children)
            {
                //叶子节点跳过
                if (leafNodes.Contains(child.UserName))
                {
                    continue;
                }


                GetChildren(child, leafNodes);
            }

            return(root);
        }