C# 尝试获取可以具有无限嵌套子对象的选定对象的所有子对象
我有一个文件夹层次结构,其中一个文件夹可以有一个父文件夹,深度无限 所以。。。 文件夹A FolderId=1 ParentFolderId=Null顶级 文件夹B FolderId=2 ParentFolderId=1嵌套在 文件夹C FolderId=3 ParentFolderId=2嵌套在B下 文件夹D FolderId=4 ParentFolderId=3嵌套在C下 我希望获得文件夹B或用户选择的任何文件夹的所有子文件夹,以便删除所有子文件夹,但保留父文件夹,当然,除非选择了顶级文件夹 这可能是一些相当简单的递归或foreach循环,但今天早上我正在努力解决它!我使用的是C和EF,所以使用它会非常有用。如果可能的话,我希望结果是一个简单的列表 理想情况下,我希望将它作为自定义文件夹对象的一个方法,这样,我拥有的任何文件夹,我都可以说Folder.Children或类似的东西 文件夹对象:C# 尝试获取可以具有无限嵌套子对象的选定对象的所有子对象,c#,algorithm,recursion,C#,Algorithm,Recursion,我有一个文件夹层次结构,其中一个文件夹可以有一个父文件夹,深度无限 所以。。。 文件夹A FolderId=1 ParentFolderId=Null顶级 文件夹B FolderId=2 ParentFolderId=1嵌套在 文件夹C FolderId=3 ParentFolderId=2嵌套在B下 文件夹D FolderId=4 ParentFolderId=3嵌套在C下 我希望获得文件夹B或用户选择的任何文件夹的所有子文件夹,以便删除所有子文件夹,但保留父文件夹,当然,除非选择了顶级文件夹
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;
}
这里有一个递归方法,它可以实现您想要的功能。您使用要获取的子文件夹的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;
}
你能把你已经尝试过的东西贴出来吗?我没有多少。我试着用一些其他的StackOverflow问题,但是没有成功。你能把你已经尝试过的东西贴出来,这样就可以用它来回答问题了吗?我没有太多。曾尝试使用其他StackOverflow问题,但没有成功。@Josh-Maris适合您+1。您可能希望将其更改为使用迭代器块,使其更加灵活,但总体而言,它将执行您想要的操作?您认为您可以进一步解释一下您的代码吗?@eddy context是EF DbContext实现的一个实例。@Josh-Maris适合您+1。您可能希望将其更改为使用迭代器块,使其更加灵活,但总体而言,它将执行您想要的操作?您认为您可以进一步解释一下您的代码吗?@eddy-context是EF-DbContext实现的一个实例。