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
----
posted @ 2022-10-21 11:25  罗马景行  阅读(127)  评论(0编辑  收藏  举报