gpt4 book ai didi

c# - 递归 LINQ 查询函数中的嵌套索引

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:18 26 4
gpt4 key购买 nike

我有一个递归 LINQ 查询函数,它将平面树结构从数据库转换为层次结构树。现在我想将索引添加到每个树叶。问题是索引必须从其父级嵌套。

这是LINQ递归函数

    public IList<QuestionGroupTree> FlatToHierarchy(IEnumerable<QuestionGroupTree> list, string parentId)
{
return list.Where(i => i.CParentId == parentId)
.Select((v, i) => new QuestionGroupTree {
CNodeId = v.CNodeId,
CParentId = v.CParentId,
CNodeName = v.CNodeName,
Children = FlatToHierarchy(list, v.CNodeId),
NodeIndex = i + 1
}).ToList();

}

如您所见,我尝试从 LINQ 函数中获取索引并将其放入 NodeIndex 属性中。但它不是从其父级堆叠的。

这是输出

1. Customer Service
1. MalFunction
1. Host Failure
1. Contact Information
2. Models
3. OnSet
4. Other Service
5. Warranty

这是我期待的

1. Customer Service
1.1. MalFunction
1.1.1. Host Failure
1.1.1.1. Contact Information
1.1.1.2. Models
1.1.1.3. OnSet
1.1.1.4. Other Service
1.1.1.5. Warranty
2. Blah Blah
2.1. Blah Blah

所以当涉及到递归时,我真的不知道如何从父级获取嵌套索引。不像嵌套的 for 循环,我们可以简单地获取父级。

有点像

for(var i)
for(var j)
for(var k)
console.log(i + '. ' + j + '. ' + k)

最佳答案

尝试将 NodeIndex 的类型更改为字符串而不是 int。然后,您可以将父索引传递给您的函数,并使用它为 NodeIndex 创建前缀。

看例子:

public IList<QuestionGroupTree> FlatToHierarchy(IEnumerable<QuestionGroupTree> list, string parentId, string parentIndex)
{
var prefix = string.IsNullOrWhiteSpace(parrentIndex) ? "" : parrentIndex+".";
return list.Where(i => i.CParentId == parentId)
.Select((v, i) => new QuestionGroupTree {
CNodeId = v.CNodeId,
CParentId = v.CParentId,
CNodeName = v.CNodeName,
Children = FlatToHierarchy(list, v.CNodeId, prefix+(index + 1)),
NodeIndex = prefix+(index + 1)
}).ToList();

}

关于c# - 递归 LINQ 查询函数中的嵌套索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57217379/

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