using System; using System.Collections.Generic; using System.Linq; namespace NestedSetModelTest { internal class Program { private static List list = new List(); private static void Main(string[] args) { var root = CreateTree(); Add(root); var i = 1; foreach (var item in list) { item.Left = i++; } list.Reverse(); foreach (var item in list) { item.Right = i++; } list.Reverse(); foreach (var item in list) { Console.WriteLine($"{item.Name}:{item.Number},{item.Left}-{item.Right}"); } } private static void Add(Node node) { list.Add(node); if (node.Children.Any()) { foreach (var item in node.Children.OrderBy(o => o.DisplayOrder)) { Add(item); } } } private static Node CreateTree() { var root = new Node { Name = "root", Number = "1-18", Children = new List { new Node{ Name="Fruit", Number="2-11", Children=new List{ new Node{ Name="Red", Number="3-6", Children=new List { new Node{ Name="Cherry", Number="4-5" } } }, new Node{ Name="Yellow", Number="7-10", DisplayOrder=1, Children=new List { new Node{ Name="Banana", Number="8-9" } } } } }, new Node{ Name="Meat", Number="12-17", DisplayOrder=1, Children=new List{ new Node{ Name="Beef", Number="13-14" }, new Node{ Name="Port", Number="15-16", DisplayOrder=1, } } } } }; return root; } } }