C# 使用递归查询树的所有父节点

背景:公司项目要实现兼容 MS SQL、Oracle、PgSQL、DM 等多种数据库,由于各种数据库对递归实现方式不尽相同,如果每种数据库都写一种 SQL 语句来实现,未免太多,且需求是不定的,哪天又加一种数据库,会很大的增加代码的维护成本。因此为了更好的同时兼容多种数据库,我们可以用代码代替 SQL 语句来实现递归查询。

实现:

List<string> parentOrg = new List<string>();

/// <summary>
/// 递归查询父级ID
/// </summary>
/// <param name="id"></param>
/// <param name="list"></param>
/// <returns></returns>
private string GetParents(string id, List<dynamic> list)
{
    parentOrg.Add(id);
    List<dynamic> result = list.Where(x => x.ID == id).ToList();
    if (result.Count > 0 && result[0].ParentID != null && result[0].ParentID.ToString() != "")
        return GetParents(result[0].ParentID, list);
    else
        return id;
}

public static class Main(string[] args)
{
    string id = '3'; //当前节点id
    List<dynamic> listAll; //result是符合包含当前节点在内的所有节点的列表
    GetParents(id, listAll);
    List<dynamic> result = parentOrg; //得到的result就是当前节点+当前节点的所有父级
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值