/// <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); }
/// <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); }