如何查询大型共享点列表

How to query large sharepoint list

我有一个包含数万个项目的列表。

我尝试使用 where 子句来限制查询,如下所示:

var list = Context.Web.Lists.GetByTitle(title);

string query = $@"<Query>
<Where>
    <Lt>
        <FieldRef Name='ID' /><Value Type='Integer'>100</Value>
    </Lt>
</Where>
<OrderBy><FieldRef Name='ID' Ascending='true' /></OrderBy>
</Query>";

var camlQuery = new CamlQuery();
camlQuery.ViewXml = query;

var items = list.GetItems(camlQuery);
Context.Load(items);
Context.ExecuteQuery();

但我还是 SPQueryThrottledException:

The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator.

如何查询大型sp列表?

您需要修改您的 CAML 查询并使用 ListItemCollectionPosition 分页以及设置 RowLimit 值。

尝试修改下面的示例代码:

var list = Context.Web.Lists.GetByTitle(title);
ListItemCollectionPosition position = null;

try
{
    do
    {
        string query = $@"<View> 
            <ViewFields>
                <FieldRef Name='Title'/>
            </ViewFields>       
            <Query>
                <Where>
                    <Lt>
                        <FieldRef Name='ID' /><Value Type='Integer'>100</Value>
                    </Lt>
                </Where>
            <OrderBy><FieldRef Name='ID' /></OrderBy>
            </Query><RowLimit>100</RowLimit></View>";

        var camlQuery = new CamlQuery();
        camlQuery.ViewXml = query;


        var items = list.GetItems(camlQuery);
        Context.Load(items);
        Context.ExecuteQuery();
        position = items.ListItemCollectionPosition;

        foreach (ListItem listItem in items)
            Console.WriteLine("Title: {0}", listItem["Title"]);
    }
    while (position != null);

}
catch(Exception ex)
{

}

根据评论更新了 CAML 查询:

string query = $@"<View>                            
<Query>
    <Where>
        <And>
            <Geq>
                <FieldRef Name='ID' /><Value Type='Integer'>1</Value>
            </Geq>
            <Leq>
                <FieldRef Name='ID' /><Value Type='Integer'>1000</Value>
            </Leq>                                        
        </And>
    </Where>
<OrderBy><FieldRef Name='Created' /></OrderBy>
</Query><RowLimit>100</RowLimit></View>";