正在尝试获取所选对象的所有子对象,这些子对象可以具有无限嵌套的子对象

本文关键字:对象 嵌套 无限 获取 | 更新日期: 2023-09-27 18:00:03

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

所以。。。文件夹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;
}