ho risolto cosi con una funzione ricorsiva


Codice PHP:
    public partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void button1_Click(object senderEventArgs e)
        {
            
MenuItems unsortedMenuItems createMenuItems();

            
MenuItems menuItems GetMenuItems(unsortedMenuItemsGuid.Empty.ToString());

        }

        private 
MenuItems GetMenuItems(MenuItems unsortedMenuItemsstring 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(unsortedMenuItemsmi.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;
        }
    }