using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Data.DataSetExtensions;
using System.Net.Sockets;
public static void Main()
var inputList = new List<InputClass>();
inputList.Add(new InputClass() { id = 1, text = "Item #1"});
inputList.Add(new InputClass() { id = 2, text = "Item #2" });
inputList.Add(new InputClass() { id = 3, text = "Item #3" });
inputList.Add(new InputClass() { id = 4, text = "SubItem #1", parentId = 1 });
inputList.Add(new InputClass() { id = 5, text = "SubItem #2", parentId = 1 });
inputList.Add(new InputClass() { id = 6, text = "SubItem #3", parentId = 2 });
inputList.Add(new InputClass() { id = 7, text = "Sub-Sub Item #1", parentId = 4 });
inputList.Add(new InputClass() { id = 8, text = "Sub-Sub Item #1", parentId = 7 });
Recursive(inputList,1).Dump();
public static IEnumerable<InputClass> Recursive(List<InputClass> items, int toplevelid)
List<InputClass> inner = new List<InputClass>();
foreach (var t in items.Where(item=>item.parentId ==toplevelid))
inner = inner.Union(Recursive(items, t.id)).ToList();
public int id { get; set; }
public string text { get; set; }
public string icon { get; set; }
public int? parentId { get; set; }