我有一個對象:如何寫遞歸lambda表達式(LINQ查詢)
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);
上面的回報正是我所需要的,但我不喜歡代碼,如果我想向文件夾結構添加多個圖層,會導致問題。
任何想法,我可以寫這個,所以我得到所有的子文件夾和所有文件,儘管在我的文件夾結構中有多少層?
爲什麼不使用一個好的舊遞歸樹遍歷? –
看看這個:http://stackoverflow.com/questions/61143/recursive-lambda-expression-to-traverse-a-tree-in-c-sharp –
你能澄清一下:你是否在使用數據庫而你想要將其轉換爲一個DB命令? – ChrFin