CSharp · Console
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Linq;
using System.Globalization;
using System.Data;
using System.Data.DataSetExtensions;
using System.Net;
using System.Net.Sockets;
using System.IO;
public class Program
{
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.Add(t);
inner = inner.Union(Recursive(items, t.id)).ToList();
}
return inner;
}
}
public class InputClass
{
public int id { get; set; }
public string text { get; set; }
public string icon { get; set; }
public int? parentId { get; set; }
}