【问题标题】:SharePoint CSOM C# Load Query with Where Clause Performance具有 Where 子句性能的 SharePoint CSOM C# 加载查询
【发布时间】:2016-07-26 14:48:54
【问题描述】:

SharePoint CSOM 如何处理此代码块?

FileCollection allDocs = libFolder.Files;
clientContext.Load(allDocs, files => files.Where(file => file.Name == "test.docx");
clientContext.ExecuteQuery();

if (allDocs.Count > 0)
{
    File currentDoc = allDocs[0];
    // continue
}

“allDocs”集合是否完全枚举,或者 Load 参数中的 Where 子句是否精确定位单个文件?

此外,必须有一种更好的方法来在 CSOM 中按文件名检索文件,而无需“allDocs[0]”索引集合选择。 你会怎么做?

【问题讨论】:

    标签: sharepoint-2013 sharepoint-clientobject


    【解决方案1】:

    如果使用下面的代码,它应该精确定位单个文件:

    FileCollection allDocs = libFolder.Files.Where(file => file.Name == "test.docx");
    clientContext.LoadQuery(allDocs); // IQueryable
    clientContext.ExecuteQuery();
    // it should query on server and return only requested items without enumerating 
    // whole library
    // i think your code does the same, but im not sure here
    // i personally prefer using syntax above
    // note that im using LoadQuery, but not Load method
    
    // you can select a single item like this without awkward allDocs[0] syntax
    var singleDoc = allDocs.SingleOrDefault();
    if (singleDoc != null) {
        // do something
    }
    

    你会怎么做?

    可能是 CAML 查询。

    【讨论】:

      【解决方案2】:

      Microsoft® SharePoint® Server 2010 让您可以使用 LINQ to SharePoint 利用 LINQ 框架和 LINQ to Entities 针对 SharePoint 列表。 LINQ 框架将 LINQ 转换为 SharePoint 将语句转换为协作应用程序标记语言 (CAML),以及 然后针对 SharePoint 对象模型或 Web 执行 CAML 服务。 Source: MSDN

      链接页面继续显示如何将文本编写器添加到 context.Log 属性以查看由 Linq-to-Sharepoint 生成的 CAML。

      在您的代码中,Linq 被转换为 IQueryable,该 IQueryable 被传递到加载函数并转换为 CAML。然后,executeQuery 运行所有存储的 IQueryable 表达式并使用结果填充变量,例如 allDocs。这是通常的 Linq 延迟执行。

      如果您要使用 .Single(...) 方法而不是 .Where(...),Linq 将尝试立即执行查询并返回单个项目而不是 IQueryable 加载方法是期待。

      正如 Alex K 所说,执行查询后,您可以使用标准 Linq 方法,例如 .Single()、.SingleOrDefault()、.First()、.FirstOrDefault() 等来获取唯一或第一项结果。

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多