1

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

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

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

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

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

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

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

理想情况下,我希望将它作为我的自定义文件夹对象的一种方法,以便我拥有的任何文件夹,我都可以说 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; }
  }

先感谢您。

4

1 回答 1

4

这是一种递归方法,可以满足您的要求。您使用要获取的子文件夹的 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;
}
于 2013-02-17T18:35:49.523 回答