如何编写递归lambda表达式(LINQ查询)

h3li0s

我有一个对象:

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);

上面的代码恰好返回了我所需要的,但是我不喜欢代码,如果我想在文件夹结构中添加更多的层,则会导致问题。

有什么想法可以写这个,所以我得到所有的Child文件夹,以及所有文件,尽管我的文件夹结构中有多层。

克里斯多夫·芬克

遗憾的是,LINQ AFAIK中没有递归支持(我遇到了同样的问题),但是您至少可以将其缩短为:

var results = DbContext.Set<Folder>()
            .Include(f => f.ParentFolder)
            .Include(f => f.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.ParentFolder == null);

如果选择“较高级别”,则还将包括所有“较低级别”。

我认为这是因为SQL也对此不支持。

如果您可以使用对数据库的多个查询来执行此“代码”(或者完全不使用数据库),请参阅golergka的注释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用LinQ lambda表达式编写此查询

来自分类Dev

如何将这个LINQ查询编写为Lambda表达式?

来自分类Dev

递归Lambda表达式查询

来自分类Dev

有没有办法使用 lambda 表达式编写这个 LINQ 查询?

来自分类Dev

将Linq查询表达式转换为Linq Lambda表达式

来自分类Dev

SQL查询到LINQ Lambda表达式

来自分类Dev

如何将此LEFT JOIN Linq查询转换为Lambda表达式

来自分类Dev

如何使用Lambda表达式将SQL查询写入LINQ?

来自分类Dev

如何将linq查询转换为lambda表达式

来自分类Dev

如何使用 lambda 表达式实现递归函数

来自分类常见问题

如何编写VB.Net Lambda表达式

来自分类Dev

如何为SQL交叉联接编写Linq表达式?

来自分类Dev

如何使用表达式树编写此嵌套查询?

来自分类Dev

正则表达式,如何编写查询

来自分类Dev

使用lambda表达式的递归函数

来自分类Dev

编写递归lambda表达式以获取所有相关数据的最佳方法是什么?

来自分类Dev

如何对foreach循环的linq lambda表达式进行OR运算

来自分类Dev

如何将此Lambda表达式转换为linq

来自分类Dev

如何在linq lambda表达式中使用ToShortDateString?

来自分类Dev

如何在linq lambda表达式中添加条件

来自分类Dev

如何使用 Linq 创建多属性 lambda 表达式

来自分类Dev

如何在linq查询中合并表达式

来自分类Dev

如何在linq查询中传递表达式列表

来自分类Dev

表达式不能包含lambda表达式Linq

来自分类Dev

如何使用System.Linq.Dynamic.Core将复杂的查询字符串转换为lambda表达式

来自分类Dev

无法在Linq中为一对多关系编写lambda表达式

来自分类Dev

lambda和linq表达式

来自分类Dev

sql的linq lambda表达式包含

来自分类Dev

linq表达式中的内联lambda?

Related 相关文章

热门标签

归档