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就是當前節點+當前節點的所有父級
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章