C# 拿一个子级的id,来过去顶级的父级ID
//获得父级ID
public int FindParentId( int childId)
{
try
{
//数据源
var cesji = DBServerProvider.DbContext.Set<Sys_NetWork>().Where(t => t.isEnable == 1).ToList();
//通过子级ID来查询父级数据
var childNode = cesji.Where(t => t.id == childId).FirstOrDefault();
if (childNode == null)
{
return 0; // 如果找不到对应的子级节点,返回0 或其他合适的值 }
}
else
{
if (childNode.ParentId == null)
{
return childNode.id; // 如果当前节点已经是顶级节点,返回0 或其他合适的值 }
}
else
{
return FindParentId(childNode.ParentId.Value);
}
}
}
catch (Exception)
{
throw;
}
}
通过 父级ID来获取所有的子级数据
public List<Sys_NetWork> GetYoungers(List<Sys_NetWork> nodes, int parentId)
{
//记录子级数据
List<Sys_NetWork> children = new List<Sys_NetWork>();
foreach (var node in nodes)
{
//这里是特殊处理可以不看
if (node.ParentId==null&&node.NetWorkType==1&&node.id== parentId)
{
children.Add(node);
}
//查询相同的子级数据加入集合
if (node.ParentId == parentId)
{
children.Add(node);
//传入父级ID
children.AddRange(GetYoungers(nodes, node.id));
}
}
return children;
}
调用
List<Sys_NetWork> GetYoungersResult = GetYoungers(DBServerProvider.DbContext.Set<Sys_NetWork>().Where(t => t.isEnable == 1).Where (tt => tt.NetWorkType !=4).ToList(), ParId);