最简单的方法实现递归

方法一:

//取出第一条

var first = allMenuList.Where(e => e.ParentId == 0).ToList();

//Foreach递归

allMenuList.ForEach(e => e.ChildrenItem = allMenuList.Where(a => a.ParentId == e.Id).ToList());

return first;

 

方法二:

var first = allMenuList.Where(e => e.ParentId == 0).ToList();

Recursive(first,allMenuList);

private void Recursive(List<MenuListModel> currentMenuList, List<MenuListModel> allMenuList)
{
  if (currentMenuList == null || currentMenuList.Count == 0)
  {
    return;
  }

  foreach (var item in currentMenuList)
  {
    item.ChildrenItem = allMenuList.Where(e => e.ParentId == item.Id).ToList();
    Recursive(item.ChildrenItem, allMenuList);
  };
}

 

递归会逐层逐层查下去,查到最末节点(第n个节点)时没有数据会原路返回,回到(n-1)个节点,继续查找,如果没有则继续回到(n-2)个节点,一直到第一个节点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL中,实现归可以使用归查询(Recursive Query)。MySQL 8.0版本及以上提供了归查询的功能。下面是一个简单的示例来演示如何使用归查询实现归: 假设我们有一个简单的员工表(employee),包含员工ID(id)和直接上级ID(manager_id)两列。我们想要归地查询某个员工的所有下属,可以按照以下步骤进行: 1. 首先,我们需要创建一个归查询表达式(Recursive CTE)。在归查询表达式中,我们指定初始查询(Anchor Query)和归查询(Recursive Query)。 2. 在初始查询中,我们指定了起始条件,也就是要查询的员工ID。 3. 在归查询中,我们使用了归引用,来将查询结果与归查询自身进行连接。 下面是一个示例的归查询: ``` WITH RECURSIVE employee_hierarchy AS ( SELECT id, name, manager_id, 0 AS level FROM employee WHERE id = 1 -- 起始员工ID UNION ALL SELECT e.id, e.name, e.manager_id, eh.level + 1 FROM employee e INNER JOIN employee_hierarchy eh ON e.manager_id = eh.id ) SELECT id, name, level FROM employee_hierarchy ORDER BY level; ``` 在上述示例中,我们创建了一个归查询表达式(employee_hierarchy),其中初始查询选择了员工ID为1的员工作为起始条件。然后,归查询将每个员工与其直接上级进行连接,直到没有更多的下属为止。 最后,我们从归查询表达式中选择所需的列,并按照层级(level)进行排序。 请注意,归查询在处理大型数据集时可能会导致性能问题。在使用归查询时,请确保正确使用索引以提高查询性能,并注意避免创建无限归循环。 希望这个示例能够帮助你理解如何在MySQL中简单实现归查询。如果你有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值