背景:公司项目要实现兼容 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就是当前节点+当前节点的所有父级
}