【发布时间】:2014-11-05 04:30:24
【问题描述】:
我有一个支持多层次层次结构的菜单。我创建了一个函数来获取树中的最后一项并返回其 ID。我需要这个 ID,这样我就可以隐藏管理页面上的下移箭头。
虽然这可行,但我花了 2 天时间试图找到一种 LINQ 方法来做同样的事情。所以我的问题是:
-是否有可能以纯粹的 LINQ 方式做到这一点? -如果有,怎么做?
我的 MenuItem 模型如下所示:
public partial class MenuItem
{
public MenuItem()
{
this.ChildMenuItems = new HashSet<MenuItem>();
}
public int Id { get; set; }
public int MenuItemTypeId { get; set; }
public int MenuId { get; set; }
public string DisplayText { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
public Nullable<int> ParentMenuItemId { get; set; }
public int Rank { get; set; }
public virtual MenuItemType MenuItemType { get; set; }
public virtual Menu Menu { get; set; }
public virtual ICollection<MenuItem> ChildMenuItems { get; set; }
public virtual MenuItem ParentMenuItem { get; set; }
}
我的递归函数如下所示:
public static int GetLastMenuItemId(List<MenuItem> menuItems)
{
foreach (MenuItem menuItem in menuItems.OrderBy(mi => mi.Rank))
{
lastId = menuItem.Id;
if (menuItem.ChildMenuItems.Any())
{
GetLastMenuItemId(menuItem.ChildMenuItems.ToList());
}
}
return lastId;
}
此外,我的菜单树目前如下所示:
Categories: 8 Parent: n/a
Admin: 1 Parent: n/a
Manage Menus: 2 Parent: 1
Manage Menus: 7 Parent: 2
------------: 5 Parent: 2
Menus: 3 Parent: 2
Menu Item Types: 4 Parent: 2
Menu Items: 6 Parent: 2
Manage Categories: 9 Parent: 1
Manage Clicks: 10 Parent: 1
Manage Comments: 11 Parent: 1
Manage Images: 12 Parent: 1
Manage Ratings: 13 Parent: 1
【问题讨论】: