我需要过滤一个层次列表,如:
- 文件夹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;
延迟加载
这个怎么样:
Folders.Where(folder => folder.Documents.Any(document => document.Status == DocumentStatus.Deleted));
不幸的是,你有一个更复杂的结构,上面的linq语句只适用于有文档的文件夹,而不适用于其他文件夹。
要做你想做的事情,你必须手动定义一个谓词并使用它进行过滤,因为在文件夹有子文件夹的情况下,你必须递归地调用过滤器方法来查看条件是否为真。