recursive

CSharp · Console

/Program.cs

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; }

}
;