我的问题是我有一个带有子文件夹的文档库。此外,文档库有不止一种内容类型。

有没有办法创建 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查询

许可以下: CC-BY-SA归因
scroll top