I have an object:
public class Folder : DBObjectBase
{
public string Name { get; set; }
public List<FileEntry> Files { get; set; }
public Folder ParentFolder { get; set; }
public List<Folder> ChildFolders { get; set; }
}
and I've written a query that retrieves a folder structure and all files within each folder:
var results = DbContext.Set<Folder>()
.Include(f => f.ParentFolder)
.Include(f => f.ChildFolders)
.Include(f => f.Files)
.Include(f => f.ChildFolders.Select(f1 => f1.Files))
.Include(f => f.ChildFolders.Select(f1 => f1.ChildFolders).Select(f2 => f.Files))
.Include(f => f.ChildFolders.Select(f1 => f1.ChildFolders).Select(f2 => f.ChildFolders.Select(f3 => f3.Files)))
.Include(f => f.ChildFolders.Select(f1 => f1.ChildFolders).Select(f2 => f.ChildFolders.Select(f3 => f3.ChildFolders.Select(f4 => f4.Files))))
.Include(f => f.ChildFolders.Select(f1 => f1.ChildFolders).Select(f2 => f.ChildFolders.Select(f3 => f3.ChildFolders.Select(f4 => f4.ChildFolders.Select(f5 => f5.Files)))))
.Include(f => f.ChildFolders.Select(f1 => f1.ChildFolders).Select(f2 => f.ChildFolders.Select(f3 => f3.ChildFolders.Select(f4 => f4.ChildFolders.Select(f5 => f5.ChildFolders.Select(f6 => f6.Files))))))
.Where(f => f.ParentFolder == null);
The above returns exactly what I need, but I don't like the code, cause it causes problems if I would like to add multiple more layers to the folder structure.
Any ideas how I could write this, so I get all Child folders, and all files despite the number of layers I have in my folder structure?