ho risolto cosi con una funzione ricorsiva

Codice PHP:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MenuItems unsortedMenuItems = createMenuItems();
MenuItems menuItems = GetMenuItems(unsortedMenuItems, Guid.Empty.ToString());
}
private MenuItems GetMenuItems(MenuItems unsortedMenuItems, string guid)
{
MenuItems menuItems = new MenuItems();
foreach(MenuItem mi in unsortedMenuItems)
{
if (mi.ParentMenuItemId.Equals(guid))
{
menuItems.Add(mi);
}
}
foreach (MenuItem mi in menuItems)
mi.ChildMenuItems = GetMenuItems(unsortedMenuItems, mi.MenuItemId);
return menuItems;
}
private MenuItems createMenuItems()
{
string menuid1 = Guid.NewGuid().ToString();
string menuid2 = Guid.NewGuid().ToString();
string submenuid1 = Guid.NewGuid().ToString();
string submenuid2 = Guid.NewGuid().ToString();
MenuItems menuItems = new MenuItems();
MenuItem menuItem = new MenuItem();
#region menu1
menuItem.MenuItemId = menuid1;
menuItem.ParentMenuItemId = Guid.Empty.ToString();
menuItem.Description = "menu1";
menuItem.Order = 0;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = submenuid1;
menuItem.ParentMenuItemId = menuid1;
menuItem.Description = "menu1-submenu1";
menuItem.Order = 0;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = submenuid2;
menuItem.ParentMenuItemId = menuid1;
menuItem.Description = "menu1-submenu2";
menuItem.Order = 1;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = Guid.NewGuid().ToString();
menuItem.ParentMenuItemId = submenuid2;
menuItem.Description = "menu1-submenu2-sub3";
menuItem.Order = 1;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
#endregion
#region menu2
menuItem = new MenuItem();
menuItem.MenuItemId = menuid2;
menuItem.ParentMenuItemId = Guid.Empty.ToString();
menuItem.Description = "menu2";
menuItem.Order = 1;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = Guid.NewGuid().ToString();
menuItem.ParentMenuItemId = menuid2;
menuItem.Description = "menu2-submenu1";
menuItem.Order = 0;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = Guid.NewGuid().ToString();
menuItem.ParentMenuItemId = menuid2;
menuItem.Description = "menu2-submenu2";
menuItem.Order = 1;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.MenuItemId = Guid.NewGuid().ToString();
menuItem.ParentMenuItemId = menuid2;
menuItem.Description = "menu2-submenu3";
menuItem.Order = 2;
menuItem.Type = MenuType.UNDEFINED;
menuItems.Add(menuItem);
#endregion
return menuItems;
}
}