之前一直不理解递归,直到这次用到之后慢慢理解了,代码如下:
/// <summary>
/// 递归调用添加包含子集
/// </summary>
/// <param name="allList"></param>
/// <param name="list"></param>
/// <param name="pid"></param>
private void GetLisyByDiGui(List<AppResourceTable> allList, List<AppResourceTable> list, string pid)
{
var clist = allList.Where(x => x.PID.ToString().Trim().ToUpper() == pid.Trim().ToUpper()).ToList(); //得到pid下的下一层集合
if (clist.Count > 0)
{
list.AddRange(clist);
}
foreach (var item in clist)
{
this.GetLisyByDiGui(allList, list, item.ID.ToString());
}
}
/// <summary>
/// 递归加载
/// </summary>
/// <param name="rescode"></param>
/// <param name="includParent"></param>
/// <returns></returns>
public List<AppResourceTable> GetListByResCode(string rescode, bool includParent = false)
{
ZemtProblemManagementDBContext db = new ZemtProblemManagementDBContext();//创建数据库上下文
var allList = dal.GetAll(db); //获取所有资源表数据
List<AppResourceTable> list = new List<AppResourceTable>();
var ce = dal.GetByRescode(db, rescode);//获取Code对应的数据
if (includParent)
{
list.Add(ce);
}
this.GetLisyByDiGui(allList, list, ce.ID.ToString()); //调用递归方法
return list;
}