private void BuildTree() { CategoryTree = new CategoryNode(); CategoryDto rootNode = NodeList.FirstOrDefault(o => o.ParentId == null); if (rootNode != null) { CategoryTree.Name = rootNode.Name; // add first level nodes foreach (CategoryDto item in NodeList.Where(o => object.Equals(o.ParentId, rootNode.Id))) { // add node CategoryNode node = new CategoryNode(item.Name, item.Id); CategoryTree.SubNodes.Add(node); // explorer next level BuildSubTree(node, 1); } } }