实体框架/ LINQ:过滤分层列表

时间:2013-01-14 10:57:06

标签: c# linq entity-framework

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

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

启用了延迟加载。

1 个答案:

答案 0 :(得分:1)

这个怎么样:

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

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

要执行您想要执行的操作,您必须手动定义谓词并使用它进行过滤,因为如果文件夹中有子项是文件夹本身,则必须递归调用filter方法以查看条件是的。