gpt4 book ai didi

c# - 获取 LINQ 列表中的所有子项

转载 作者:行者123 更新时间:2023-11-30 19:55:54 27 4
gpt4 key购买 nike

我有一个大型后端数据库,它具有我正在使用的以下类结构:

public class InputClass
{
public int id { get; set; }
public string text { get; set; }
public string icon { get; set; }
public int? parentId { get; set; }
}

如您所见,每个元素都可以有一个父 ID,它最终会生成一个树形信息列表,用户可以与之交互。

以下面的示例数据为例:

var inputList = new List<InputClass>();
inputList.Add(new InputClass() { id = 1, text = "Item #1"});
inputList.Add(new InputClass() { id = 2, text = "Item #2" });
inputList.Add(new InputClass() { id = 3, text = "Item #3" });
inputList.Add(new InputClass() { id = 4, text = "SubItem #1", parentId = 1 });
inputList.Add(new InputClass() { id = 5, text = "SubItem #2", parentId = 1 });
inputList.Add(new InputClass() { id = 6, text = "SubItem #3", parentId = 2 });
inputList.Add(new InputClass() { id = 7, text = "Sub-Sub Item #1", parentId = 4 });

我想传递一个 ID # 并检索所有标有该 parentID 的元素的列表。比如我的身份证号是1,结果应该是这样的:

ID  Name
4 Subitem #1
5 Subitem #2
7 Sub-Sub Item #1

如您所见,结果应返回 ID #1 下的所有内容,包括 ID #7 的项目(即使它的父 ID 为 4,项目 #4 的父 ID 为 #1)。

我希望以上内容有意义,关于如何在 LINQ 中实现这一点有什么想法吗?

最佳答案

递归方法。

public static IEnumerable<InputClass> Recursive(List<InputClass> items, int toplevelid)     
{
List<InputClass> inner = new List<InputClass>();
foreach (var t in items.Where(item=>item.parentId ==toplevelid))
{
inner.Add(t);
inner = inner.Union(Recursive(items, t.id)).ToList();
}

return inner;
}

工作 Demo

关于c# - 获取 LINQ 列表中的所有子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546401/

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