EntityFramework/LINQ:过滤一个层次列表

本文关键字:一个 层次 列表 LINQ 过滤 EntityFramework | 更新日期: 2023-09-27 17:52:45

我需要过滤一个层次列表,如:

  • 文件夹1
  • 文件夹2
    • 文档1
    • 文档2
    • 文件夹4
        文档
      • 3
      • 文档4
  • 文件夹3
      文档

每个文件夹都有文件夹和/或文档。每个文档都有一个Status枚举。我怎样才能得到所有空文件夹或文档的状态从文档是在"已删除"?

var folders = from f in context.Folders
              // where f.Documents.All( d => d.Status == DocumentStatus.Deleted )
              select f;

延迟加载

EntityFramework/LINQ:过滤一个层次列表

这个怎么样:

Folders.Where(folder => folder.Documents.Any(document => document.Status == DocumentStatus.Deleted));

不幸的是,你有一个更复杂的结构,上面的linq语句只适用于有文档的文件夹,而不适用于其他文件夹。

要做你想做的事情,你必须手动定义一个谓词并使用它进行过滤,因为在文件夹有子文件夹的情况下,你必须递归地调用过滤器方法来查看条件是否为真。