如何查询大型共享点列表
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>";
我有一个包含数万个项目的列表。
我尝试使用 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>";