using System.Collections.Generic;
public int IDMacroTab { get; set; }
public List<Tab> Tabs { get; set; }
public object HelperClass { get; set; }
Slots = new List<Slot>();
public int IDTab { get; set; }
public List<Slot> Slots { get; set; }
public object HelperClass { get; set; }
public int IDSlot { get; set; }
public object HelperClass { get; set; }
public static void Main()
List<MacroTab> hierarchaldata = CreateHierarchaldata();
var flattenedList = (from macroTab in hierarchaldata
from tab in macroTab.Tabs
select new {macroTab.IDMacroTab, tab.IDTab, slot.IDSlot}).ToList();
var antiflatten = from macrotab in flattenedList
group macrotab by new {macrotab.IDMacroTab}
let macrotabFirst = macrotabs.First()
IDMacroTab = macrotabFirst.IDMacroTab,
Tabs = (from macrotab in macrotabs
group macrotabs by new {macrotab.IDTab}
let tabFirst = tabs.First()
select new Tab(){ HelperClass = tabFirst}).ToList()
private static List<MacroTab> CreateHierarchaldata()
List<MacroTab> p = new List<MacroTab>()