正在尝试获取所选对象的所有子对象,这些子对象可以具有无限嵌套的子对象
本文关键字:对象 嵌套 无限 获取 | 更新日期: 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;
}