8,497
社区成员
发帖
与我相关
我的任务
分享
public tbl_Organize()
{
this.Children = new HashSet<tbl_Organize>();
}
public int OrganizeId { get; set; }
public Nullable<int> ParentId { get; set; }
public string FullName { get; set; }
public virtual ICollection<tbl_Organize> Children { get; set; }
public virtual tbl_Organize Parent { get; set; }
}
/// <summary>
/// 根据采购所负责的分类获得包含其的父/祖分类
/// </summary>
/// <param name="lstAllCatg">所有分类</param>
/// <param name="lstBuyCatg">采购所负责的分类</param>
private List<LinqToSql.Category> GetBuyerPCatg(List<LinqToSql.Category> lstAllCatg, List<LinqToSql.Category> lstBuyCatg)
{
var lstPcatg = (from p in lstAllCatg where lstBuyCatg.Select(g => g.Pid).Contains(p.Id) select p).ToList();
lstBuyCatg.AddRange((from p in lstPcatg where !lstBuyCatg.Select(g => g.Id).Contains(p.Id) select p).ToList());
//如果还有父节点(Pid!=0)则继续递归,否则返回
if (lstPcatg.Count() > 0 && lstPcatg.Any(p => p.Pid != 0))
lstBuyCatg.AddRange((from p in GetBuyerPCatg(lstAllCatg, lstPcatg) where !lstBuyCatg.Select(g => g.Id).Contains(p.Id) select p).ToList());
return lstBuyCatg;
}
其实就是一个递归,这里采购负责的分类记录都是子分类,然后要上溯其祖父分类形成树形