gpt4 book ai didi

c# - 试图获取可以具有无限嵌套子对象的选定对象的所有子对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:47 25 4
gpt4 key购买 nike

我有一个文件夹层次结构,其中一个文件夹可以有一个父文件夹,深度不受限制。

所以...文件夹A文件夹 ID = 1ParentFolderId = Null(顶级)

文件夹B文件夹 ID = 2ParentFolderId = 1(嵌套在A下)

文件夹C文件夹 ID = 3ParentFolderId = 2 (嵌套在B下)

文件夹D文件夹 ID = 4ParentFolderId = 3(嵌套在C下)

我想获取文件夹 B(或用户选择的任何文件夹)的所有子项,以便我可以删除所有子项,但保留父项(当然,除非选择了顶级文件夹) .

这可能是一些相当简单的递归或 foreach 循环,但今天早上我正在努力解决它!我正在使用 C# 和 EF,所以使用它们会很有帮助。如果可能的话,我希望结果是一个简单的列表。

理想情况下,我希望将它作为我的自定义 Folder 对象的一种方法,这样我拥有的任何文件夹,我都可以说 Folder.Children() 或类似的东西。

文件夹对象:

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

public string Name { get; set; }
public string Description { get; set; }

public int? ParentId { get; set; }
public virtual Folder Parent { get; set; }

public virtual ICollection<File> Files { get; set; }
}

提前谢谢你。

最佳答案

这是一个递归方法,它会做你想做的事。您使用您想要获取的子文件夹的 Id 参数调用此方法,它将检索所有子项和子项的子项以及马马虎虎。

public List<Folder> GetFolderChildsRecursive(Int32 forlderId)
{
List<Folder> childsOfFolder = context.Folder.Where(e=>e.ParentId == folderId).ToList();
foreach(Folder child in childsOfFolder)
{
List<Folder> childs = GetFoldersRecursive(child.Id);
childsOfFolder.AddRange(childs);
}
return childOfFolder;
}

关于c# - 试图获取可以具有无限嵌套子对象的选定对象的所有子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924385/

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