gpt4 book ai didi

c# - 使用 Linq 遍历层次结构表

转载 作者:行者123 更新时间:2023-11-30 14:42:57 24 4
gpt4 key购买 nike

我有一个包含两列的表,GroupId 和 ParentId(均为 GUID)。该表形成了一个层次结构,因此我可以在“GroupId”字段中查找一个值,当我找到它时,我可以查看它的 ParentId。此 ParentId 还将出现在不同记录的 GroupId 中。我可以使用它从任何点到根(根是一个空的 GUID)向上遍历层次结构树。我想做的是在知道 GroupId 时获取记录列表。这将是带有 GroupId 的记录,所有父项返回到根记录。这对 Linq 是否可行?如果可以,任何人都可以提供代码片段吗?

最佳答案

LINQ 不是为处理递归选择而设计的。

当然可以编写自己的扩展方法来补偿 LINQ to Objects 中的扩展方法,但我发现 LINQ to Entities 不喜欢不容易转换为 SQL 的功能。

编辑:有趣的是,LINQ to Entities 并没有提示 Matt Warren 使用 LINQ 进行递归 here .你可以这样做:

var result = db.Table.Where(item => item.GroupId == 5)
.Traverse(item => db.Table.Where(parent
=> item.ParentId == parent.GroupId));

使用此处定义的扩展方法:

static class LinqExtensions
{
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source,
Func<T,IEnumerable<T>> selector){
foreach(T item in source){
yield return item;
IEnumerable<T> children = selector(item);
foreach (T child in children.Traverse(selector))
{
yield return child;
}
}
}

虽然性能可能很差。

关于c# - 使用 Linq 遍历层次结构表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com