2016-09-08 6 views
-1

私はメニューを作りたい、これは私のコードです。私は再帰関数が必要です。どのように再帰的linq関数を行うことができますか?

 var newTopMenu = new TopMenuVm 
     { 
      TopMenus = (from amp in allMasterPages 
         orderby amp.DisplayOrder 
         select new TopMenuVm 
         { 
          DisplayOrder = amp.DisplayOrder, 
          Url = string.IsNullOrEmpty(amp.Url) ? GenerateUrl(amp.Page1.OrderBy(x => x.DisplayOrder).FirstOrDefault()) : amp.Url, 
          PageId = amp.PageId, 
          PageTitle = amp.PageTitle, 
          TopMenus = (from submenu in amp.Page1 
             orderby amp.DisplayOrder 
             select new TopMenuVm 
             { 
              DisplayOrder = submenu.DisplayOrder, 
              PageTitle = submenu.PageTitle, 
              PageId = submenu.PageId, 
              Url = string.IsNullOrEmpty(submenu.Url) ? GenerateUrl(submenu) : submenu.Url, 
             }).ToList()//Here is go on infinite..., 

         }).ToList() 
     }; 

私はどのように行うことができますLINQで、助けてくださいことを...

+1

データクラスを投稿できますか? 'allMasterPages'変数の型。 –

答えて

0

は、あなたが探しているものを、このようなものですか?もちろん

// allMasterPages is type List<MyPage> - change to whatever it really is 
Func<List<MyPage>, List<TopMenuVM>> funcTopMenuVM = null; 
funcTopMenuVM = ((pages) => { 
    return 
     (from amp in pages 
      orderby amp.DisplayOrder 
      select new TopMenuVM() 
      { 
       DisplayOrder = amp.DisplayOrder, 
       Url = string.IsNullOrEmpty(amp.Url) ? GenerateUrl(amp.Page1.OrderBy(x => x.DisplayOrder).FirstOrDefault()) : amp.Url, 
       PageId = amp.PageId, 
       PageTitle = amp.PageTitle, 
       TopMenus = funcTopMenuVM(amp.Page1) 
      }).ToList(); 
}); 

var newTopMenu = new TopMenuVM() 
{ 
    TopMenus = funcTopMenuVM(allMasterPages) 
}; 

、それは>のFunc <である必要はありません、それだけでTopMenuVM >一覧<を返し、リスト<マイページ>(または何allMasterPagesですが)かかり、通常の方法である可能性があります。

関連する問題