Sharepoint:如何通过自定义字段获取特定文件夹中的文件

Sharepoint: How to get file in specific folder by custom field

我的共享点列表(文档库)有自定义文本字段“MyCustomId”;

我在列表中有一个文件夹,文件夹中有一堆文件。

如何获取文件夹中的特定项目(文件),例如其中 MyCustomId="abc"?

    List list = ctx.Web.Lists.GetByTitle(listName);
    Folder folder  = list.RootFolder.Folders.GetByUrl(folderName);
    ctx.Load(folder);
    await ctx.ExecuteQueryAsync();

    var items = list.GetItems(??);       
    ctx.Load(items);
    //? or
    var files= folder.Files??.Where()
    ctx.Load(files);
    await ctx.ExecuteQueryAsync();
}

一种选择是使用 ctx.Load 并指定 where 子句以及应返回哪些字段。它returns FileCollection.

List list = ctx.Web.Lists.GetByTitle(listName);
Folder folder  = list.RootFolder.Folders.GetByUrl(folderName);
ctx.Load(folder);
await ctx.ExecuteQueryAsync();

// load files
var files = folder.Files;
ctx.Load(files, files => files
            .Include(f => f.ListItemAllFields, f => f.Name)
            .Where(f => f.ListItemAllFields.FieldValuesAsText["MyCustomId"] == "abc"));
await ctx.ExecuteQueryAsync();
// iterate through the files

第二个选项是创建 caml 查询。它returns ListItemCollection.

var camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='MyCustomId'/><Value Type='Text'>abc</Value></Eq></Where></Query></View>";
var listItems = list.GetItems(camlQuery);
ctx.Load(listItems);
await ctx.ExecuteQueryAsync();

根据我的研究和测试,您可以使用CAML查询来获取指定的文件:

var q = new CamlQuery();
q.ViewXml = "<View><Query><Where><Eq><FieldRef Name='MyCustomId' /><Value Type='Text'>abc</Value></Eq></Where></Query></View>";
var r = list.GetItems(q);
ctx.Load(r);
ctx.ExecuteQuery();