using OpenAuth.Repository.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenAuth.App.Base.Tree { public static class TreeExtensions { public static IEnumerable BuildTree(this List nodes, long? parentId = null) { var rootNodes = nodes .Where(n => n.ParentId == parentId || (parentId == null && (n.ParentId == null || !nodes.Any(child => child.Id == n.ParentId)))); foreach (var rootNode in rootNodes) { yield return new TreeItemLong { Id = rootNode.Id, Name = rootNode.Name, ParentId = rootNode.ParentId, Level = rootNode.Level, Children = nodes.BuildTree(rootNode.Id).ToList() }; } } public static List BuildTree1(this List nodes, long? parentId = null) { var result = new List(); foreach (var node in nodes.Where(n => n.ParentId == parentId)) { var newNode = new TreeItemLong { Id = node.Id, Name = node.Name, ParentId = node.ParentId, Children = nodes.BuildTree1(node.Id) }; result.Add(newNode); } return result; } } }