在LINQ中,可以使用递归查询来从父ID中获取所有子元素和孙元素。以下是一个示例代码:
public class Node
{
public int Id { get; set; }
public int ParentId { get; set; }
// 其他属性...
}
public static IEnumerable<Node> GetAllDescendants(IEnumerable<Node> nodes, int parentId)
{
var descendants = nodes.Where(node => node.ParentId == parentId);
foreach (var descendant in descendants)
{
yield return descendant;
foreach (var child in GetAllDescendants(nodes, descendant.Id))
{
yield return child;
}
}
}
// 使用示例
var nodes = new List<Node>
{
new Node { Id = 1, ParentId = 0 },
new Node { Id = 2, ParentId = 1 },
new Node { Id = 3, ParentId = 1 },
new Node { Id = 4, ParentId = 2 },
new Node { Id = 5, ParentId = 2 },
new Node { Id = 6, ParentId = 3 },
new Node { Id = 7, ParentId = 3 },
};
var parentId = 1;
var descendants = GetAllDescendants(nodes, parentId);
foreach (var descendant in descendants)
{
Console.WriteLine(descendant.Id);
}
上述代码定义了一个Node
类,表示树节点,其中包含Id
和ParentId
属性。GetAllDescendants
方法使用递归查询,从给定的nodes
集合中获取指定parentId
的所有子元素和孙元素。使用示例中,我们创建了一个节点集合,并指定parentId
为1,然后通过GetAllDescendants
方法获取所有子元素和孙元素,并逐个打印出它们的Id
。
这种方法适用于树形结构的数据,可以灵活地获取任意节点的子元素和孙元素。在实际应用中,可以根据具体需求进行适当的修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云