C#递归实现无限级分类

  /// <summary>
        /// 递归创建小程序类目树
        /// </summary>
        public List<MiniCategorysTree> BuildMenuTree(MiniCategorysTree node)
        {
            //条件:item.parent_category_id == node.CategoryId
            List<MiniCategorysTree> childrenCategorys = MiniCateGoryList.Where(item => item.parent_category_id == node.CategoryId)
                .Select(item => new MiniCategorysTree()
                {
                    Name = item.category_name,
                    CategoryId = item.category_id,
                    HasChild = item.has_child,
                    NeedLicense = item?.need_license,
                    NeedOutDoorPic = item?.need_out_door_pic,
                    NeedSpecialLicense = item?.need_special_license,
                })
                .ToList();
 
            node.ChildrenCategorys = childrenCategorys;
            for (int i = 0; i < childrenCategorys.Count; i++)
            {
                //递归调用创建子节点
                if (childrenCategorys[i].HasChild == true)
                    childrenCategorys[i].ChildrenCategorys = BuildMenuTree(childrenCategorys[i]);
            }
 
            return childrenCategorys;
        }

在需要用到的地方调用:

MiniCategorysTree nodeRoot = new MiniCategorysTree()
                {
                    Name = "根节点",
                    CategoryId = "0",
                    HasChild = true,
                    NeedLicense = false,
                    NeedOutDoorPic = false,
                    NeedSpecialLicense = false,
                };
                
List<MiniCategorysTree> miniCategorysTree = AppService.BuildMenuTree(nodeRoot);

miniCategorysTree的 结果:
在这里插入图片描述


linq 递归

public void init(){
   var q=from c in dbs.T_ROLE
             select c;
   b=q.ToList().AsQueryable();
}

List result= new List ();
List parents= new List ();
IQueryable b;

public void getChilds(int pid)
{
            var q = from c in b
                    where c.T_ROLE_PID == pid
                    select c;
            if (q.Count() > 0)
            {
                List li = q.ToList();
                foreach(db.T_ROLE t in li){
                    result.Add(t);
                    getChilds(t.T_ROLE_ID);
                }
            }
}

public void getParent(int id)
{
    var q = from c in b
            where c.T_ROLE_ID == id
            select c;
    if (q.Count() > 0)
    {
          List li = q.ToList();
          foreach(db.T_ROLE t in li)
          {
              result.Add(t);
              getChilds(t.T_ROLE_PID);
          }
    }
}

这里关键语句为 AsQueryable(),这样将数据库表变成内存数据表。从而对其进行任意的操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值