【发布时间】:2014-06-22 19:03:21
【问题描述】:
我有一个对象:
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; }
}
我已经编写了一个查询来检索文件夹结构和每个文件夹中的所有文件:
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);
上面返回的正是我需要的,但我不喜欢代码,如果我想在文件夹结构中添加多个层,它会导致问题。
有什么想法可以写这个,所以我得到所有子文件夹,以及所有文件,尽管我的文件夹结构中有多少层?
【问题讨论】:
-
为什么不使用好的旧递归树遍历?
-
您能否澄清一下:您使用的是数据库并且希望将其转换为一个数据库命令?
-
我正在使用数据库,这是我在 SELECT * FROM Folders f LEFT JOIN FileEntries fe On f.Id = fe.Folder_Id 之后的基本查询