gpt4 book ai didi

C# linq层次结构树

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

标签类由 ID 名称和 List<Tagging> 组成:

public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Tagging> Tagging { get; set; }
}

标记类:

public class Tagging
{
public int Id { get; set; }

[ForeignKey("ParentTag")]
public int ParentId { get; set; }
public Tag ParentTag { get; set; }

[ForeignKey("ChildTag")]
public int ChildId { get; set; }
public Tag ChildTag { get; set; }
}

标签类只是表达标签之间的多对多关系,用于分层目的。例如给定一个列表:

List<Tag> tags = new List<Tag>();
var parent = new Tag {Name = "Parent", Id = 1, Tagging = new List<Tagging>{ new Tagging{ ParentId = 1, ChildId = 2}}};
var child = new Tag {Name = "Child", Id = 2, Tagging = new List<Tagging> { new Tagging { ParentId = 2, ChildId = 3 }}};
var grandChild = new Tag {Name = "GrandChild", Id = 3};

tags.Add(parent);
tags.Add(child);
tags.Add(grandChild);

我正在尝试遍历连接到他父级的所有分层对象。例如,如果您调用方法 getAllHiearchyObject(Tag parent)输出应该是这样的:

Name : "Parent", Id = 1;
Name : "Child", Id : 2;
Name : "GrandChild", Id :3

我需要实际执行 getAllHiearchyObject(Tag parent)

最佳答案

这个怎么样...

static IEnumerable<Tag> FlattenTag(Tag root)
{
yield return root;

if (root.Tagging != null)
foreach (var childTagging in root.Tagging)
if (childTagging.ChildTag != null)
foreach (var grandChildTag in FlattenTag(childTagging.ChildTag))
yield return grandChildTag;
}

请注意,上面的第二个 foreach 允许将 yield 与递归一起使用。

用法...

foreach(var tag in FlattenTag(root))
...

关于C# linq层次结构树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35681641/

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