0

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

  • 文件夹 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;

延迟加载已启用。

4

1 回答 1

1

这个怎么样:

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

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

要做你想做的事,你必须手动定义一个谓词并用它过滤,因为如果一个文件夹有子文件夹本身,你必须递归调用过滤器方法来查看条件是否为真。

于 2013-01-14T10:59:09.033 回答