我有一个文件夹层次结构,其中文件夹可以有一个父文件夹,深度不受限制。
所以... 文件夹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对象的方法,以便我拥有任何文件夹,我可以说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; }
}
提前谢谢。
答案 0 :(得分:3)
这是一个递归方法,可以做你想要的。你可以用你想要得到的孩子的文件夹的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;
}