C# 如何实现递归linq函数?

C# 如何实现递归linq函数?,c#,linq,recursion,drop-down-menu,submenu,C#,Linq,Recursion,Drop Down Menu,Submenu,我想做一个菜单,这是我的代码。我需要递归函数 var newTopMenu = new TopMenuVm { TopMenus = (from amp in allMasterPages orderby amp.DisplayOrder select new TopMenuVm {

我想做一个菜单,这是我的代码。我需要递归函数

        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做到这一点,请帮助……

你要找的是这样的东西吗

// 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 funcTopMenuVM=null;
funcTopMenuVM=((页面)=>{
返回
(来自第页中的amp)
orderby amp.DisplayOrder
选择新建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=newtopmenuvm()
{
TopMenus=funcTopMenuVM(所有母版页)
};

当然,它不必是Func,它可以是一个常规方法,返回一个列表并获取一个列表(或其他所有母版页)。

你能发布你的数据类吗?以及
allMasterPages
变量的类型。