【问题标题】:How can i do recursive linq function?我怎样才能做递归linq函数?
【发布时间】:2016-09-09 04:46:05
【问题描述】:

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

        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 变量的类型。

标签: c# linq recursion drop-down-menu submenu


【解决方案1】:

您正在寻找类似的东西吗?

// 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,它可以只是一个常规方法,它返回一个 List 并接受一个 List(或任何 allMasterPages )。

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 2014-01-07
    • 1970-01-01
    • 2019-01-01
    • 2014-01-05
    • 2017-03-23
    • 2016-03-07
    • 2021-10-06
    • 2010-10-16
    相关资源
    最近更新 更多