public class  TestClass
{
	public List<MenuItem> Main = new List<MenuItem>();
	
	public void Enter() //入口
	{
		List<MenuItem> allMenu = GetAllMenus(); //得到数据 
		Main.Add(allMenu.Where(x => x.MenuID == 1).FirstOrDefault());//根节点
		AddMenu(allMenu, allMenu.Where(x => x.MenuID == 1).FirstOrDefault());//递归
		
		//结果树形结构
		List<MenuItem>  treeMenu = Main;
		
	}
	//父子级递归
	public void AddMenu(List<MenuItem> all, MenuItem curItem)
	{
		List<MenuItem> childItems = all.Where(ee => ee.ParentID == curItem.MenuID).ToList(); //得到子节点
		curItem.ChildItems = childItems; //将子节点加入
		
		//遍历子节点,进行递归,寻找子节点的子节点
		foreach (var subItem in childItems)
		{
			AddMenu(all, subItem);
		}
	}
	public List<MenuItem> GetAllMenus() 
	{
		List<MenuItem>() listMenuS = NEW List<MenuItem>();
		// 得到数据
		// 结构如下:
		//  MenuID  DisplayName  ParentID   ChildItems
		//    1        Name1        0                     根节点
		//    2        Name2        1
		//    3        Name3        1
		//    4        Name4        2
		//    5        Name5        2
		
		return listMenuS;
	}
	
}


//数据对象
public class MenuItem
{
	public int MenuID { get; set; }
	public string DisplayName { get; set; }
	public int ParentID { get; set; }
	public List<MenuItem> ChildItems { get; set; }
}

c# 父子级关系 递归处理_c#  父子级关系   递归处理