获取特定内容类型的子文件夹中的所有文件
-
10-12-2019 - |
题
我的问题是我有一个带有子文件夹的文档库。此外,文档库有不止一种内容类型。
有没有办法创建 CAML 或 LINQ 查询以从此子文件夹之一获取特定内容类型的所有文件。
子文件夹名称已知。
提前致谢!
解决方案
对于 SPQuery,请使用 SPQuery.文件夹 定义文件夹:
SPFolder folder = list.RootFolder.SubFolders["Folder 1"];
SPQuery query = new SPQuery();
query.Folder = folder;
然后,要定义内容类型,您应该在Where子句中包含以下条件:
SPContentType contentType = list.ContentTypes["MyContentType"];
query.Query = "<Where><Eq><FieldRef Name='ContentTypeId' /><Value Type='Text'>" + contentType.Id + "</Value></Eq></Where>";
然后,要包含“文件夹 1”的所有子文件夹,您应该指定 Scope="Recursive"
在查询 ViewAttributes 中:
query.ViewAttributes = "Scope=\"Recursive\"";
附:如果您使用客户端对象模型和 CamlQuery,语法会有点不同。IE。代替 Folder
, , 你会需要 文件夹服务器相对 URL:
query.FolderServerRelativeUrl = "/Shared Documents/Folder 1";
并且递归范围也被定义为 View 元素的属性,在这种情况下应该包含在查询中。
其他提示
您可以创建看起来像这样的CAML查询(我已经注释了不相关的部分):
<View>
..........
<QueryOptions>
<ViewAttributes Scope='Recursive' />
</QueryOptions>
<Query>
<Where>
<And>
<Eq>
<FieldRef Name="ContentType"></FieldRef>
<Value Type="Text">$Resources:ResourceFileName,ContentTypeName</Value>
</Eq>
<Eq>
<FieldRef Name="FileDirRef"></FieldRef>
<Value Type="Text">Server Relative URL of the Folder</Value>
</Eq>
</And>
</Where>
</Query>
..........
</View>
.
这将返回指定的子文件夹中指定内容类型的所有文档。
这里有一些可能有用的链接:
获取文件夹Caml 下的项目
和
过滤器文档库文件夹通过caml查询