C#-获取指定菜单的所有父菜单
菜单类
class Menu
{
public int id { get; set; }
public string menu { get; set; }
public int parentId { get; set; }
}
初始化数据
/// <summary>
/// 获取初始化数据
/// </summary>
/// <returns>初始化数据</returns>
public static List<Menu> getMenusData()
{
List<Menu> listData = new List<Menu>();
Menu menu = new Menu();
menu.id = 1;
menu.menu = "首页";
menu.parentId = 0;
listData.Add(menu);
menu = new Menu();
menu.id = 2;
menu.menu = "首页-1";
menu.parentId = 1;
listData.Add(menu);
menu = new Menu();
menu.id = 3;
menu.menu = "首页-2";
menu.parentId = 1;
listData.Add(menu);
menu = new Menu();
menu.id = 4;
menu.menu = "我的内容";
menu.parentId = 0;
listData.Add(menu);
menu = new Menu();
menu.id = 5;
menu.menu = "我的内容-1";
menu.parentId = 4;
listData.Add(menu);
menu = new Menu();
menu.id = 6;
menu.menu = "我的内容-1-1";
menu.parentId = 5;
listData.Add(menu);
menu = new Menu();
menu.id = 7;
menu.menu = "我的内容-2";
menu.parentId = 4;
listData.Add(menu);
return listData;
}
递归获取父菜单的方法
/// <summary>
/// 获取菜单,一直到第一级菜单为止
/// </summary>
/// <param name="id">菜单 Id</param>
/// <returns>菜单</returns>
public static Menu getMenu(int id,List<Menu> listMenus)
{
List<Menu> listData = getMenusData();
Menu menu = listData.Where(t => t.id == id).FirstOrDefault();
listMenus.Add(menu);
if (menu.parentId == 0) return menu;//找到第一级菜单,返回
else return getMenu(menu.parentId,listMenus);//继续往上找
}
测试方法
static void Main(string[] args)
{
#region 获取菜单
int id = 6;
List<Menu> listMenus = new List<Menu>();
getMenu(id,listMenus);
listMenus = listMenus.OrderBy(t => t.id).ToList();//正序
foreach (var item in listMenus)
{
Console.WriteLine(item.id);
Console.WriteLine(item.menu);
Console.WriteLine(item.parentId);
Console.WriteLine("----");
}
#endregion
}
输出
4
我的内容
0
----
5
我的内容-1
4
----
6
我的内容-1-1
5
----