日期:2014-05-18  浏览次数:20782 次

麻烦帮我看看这个递归为什么只取了第一层的数据。!
public List<Menus> GetTreeMenusList(int parentid)
  {
  List<Menus> newlist = new List<Menus>();
   
  using (SiteDataContext db = DBProvider.GetContext())
  {
  List<Menus> tmplist = (from c in db.Menus where c.parentid==parentid select c).ToList();

  if (tmplist.Count > 0)
  {
  foreach (Menus i in tmplist)
  {
  newlist.Add(i);
  GetTreeMenusList(i.id);
  }
  }
  }
  return newlist;
  }


------解决方案--------------------
1、newList是一个局部变量,它在每次递归的时候被创建,并且也不在递归中传递,所以,你只能获得第一层菜单。应该把newList作为一个参数传进来。
2、即使把newList作为参数在每一次递归时传递,菜单没法体现其层次性,因为所有菜单内容都被加到了同一个列表中。要解决这个问题,可以在Menus类型上增加一个存放下级菜单的属性,例如SubMenus,然后在递归的时候往这里面加数据。