using System.Collections.Generic;
public static void Main()
var c = (new CVBoxController()).GetCategories();
public class CVBoxController
public List<CategoryNode> GetCategories()
var categories = new List<CategoriesList>
new CategoriesList { Id=1, Name="Cat 01", ParentId=0 },
new CategoriesList { Id=2, Name="Cat 02", ParentId=0 },
new CategoriesList { Id=3, Name="Cat 03", ParentId=0 },
new CategoriesList { Id=4, Name="Cat 04", ParentId=0 },
new CategoriesList { Id=5, Name="Cat 05", ParentId=0 },
new CategoriesList { Id=6, Name="Cat 06", ParentId=1 },
new CategoriesList { Id=7, Name="Cat 07", ParentId=6 },
new CategoriesList { Id=8, Name="Cat 08", ParentId=3 },
new CategoriesList { Id=9, Name="Cat 09", ParentId=4 },
new CategoriesList { Id=10, Name="Cat 10", ParentId=9 },
new CategoriesList { Id=11, Name="Cat 11", ParentId=10 }
return CreateCategoryTree(categories);
private List<CategoryNode> CreateCategoryTree(List<CategoriesList> categories)
List<CategoryNode> nodes = new List<CategoryNode>();
foreach (var item in categories)
nodes.Add(new CategoryNode { Id = item.Id, Name = item.Name });
private void CreateNode(List<CategoryNode> nodes, CategoriesList parent)
foreach (var node in nodes)
if (node.Id == parent.ParentId)
node.Children.Add(new CategoryNode { Id = parent.Id, Name = parent.Name });
CreateNode(node.Children, parent);
public class CategoriesList
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public class CategoryNode
public int Id { get; set; }
public string Name { get; set; }
public List<CategoryNode> Children { get; set; }
Children = new List<CategoryNode>();