以下是构建树形结构
/// <summary>
/// 树形组织
/// </summary>
/// <param name="beginData">开始级数据</param>
/// <param name="source">总数据</param>
/// <returns></returns>
public List<OrganizationQuery_OM> GetOrganization(List<OrganizationQuery_OM> beginData, List<OrganizationQuery_OM> source)
{
try
{
if (!beginData.Any())
{
return new List<OrganizationQuery_OM>();
}
List<OrganizationQuery_OM> data = new List<OrganizationQuery_OM>();
beginData.ForEach(x =>
{
data.Add(new OrganizationQuery_OM
{
BaseUnitID = x.BaseUnitID,
BaseUnitName = x.BaseUnitName,
//ParentID = x.ParentID,
Children = GetOrganization(source.Where(w => w.ParentID == x.BaseUnitID).ToList(), source)
});
});
return data;
}
catch (Exception ex)
{
throw;
}
}
public class OrganizationQuery_OM
{
/// <summary>
/// 组织ID
/// </summary>
public int BaseUnitID { get; set; }
public int FLevel { get; set; }
/// <summary>
/// 上级组织ID
/// </summary>
public int ParentID { get; set; }
/// <summary>
/// 组织名称
/// </summary>
public string BaseUnitName { get; set; }
/// <summary>
/// 组织
/// </summary>
public List<OrganizationQuery_OM> Children { get; set; }= new List<OrganizationQuery_OM>();
}
以下是查询当前节点的所有父节点和子节点 (包括子节点的子节点和父节点的父节点)
/// <summary>
/// 获取当前节点的所有节点
/// </summary>
/// <param name="tree"></param>
/// <param name="BaseUnitName"></param>
/// <returns></returns>
public (List<OrganizationQuery_OM>,int) GetAllParents(List<OrganizationQuery_OM> tree, string BaseUnitName)
{
var parents = new List<OrganizationQuery_OM>();
var current = tree.FirstOrDefault(n => n.BaseUnitName == BaseUnitName);
var currentID = current == null ? 0 : current.BaseUnitID;
if (current != null)
{
var chilData = tree.Where(n => n.ParentID == current.BaseUnitID).ToList();
while (chilData != null&& chilData.Any())
{
parents.AddRange(chilData);
var ids = chilData.Select(x => x.BaseUnitID).ToList();
chilData = tree.Where(n => ids.Contains(n.ParentID)).ToList();
}
}
while (current != null)
{
parents.Add(current);
current = tree.FirstOrDefault(n => n.BaseUnitID == current.ParentID);
}
return (parents.Distinct().ToList(), currentID);
}