2012-01-07 33 views
2

我的列表中有7000個項目。我需要篩選列表並檢索結果 我在我的webpart中使用以下代碼。如何在sharepoit 2010中使用內容迭代器

string query = "<Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where>" 
SPQuery spquery = new SPQuery(); 
spquery.Query = query; 
ContentIterator iterator = new ContentIterator(); 
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError) 

因爲我使用ContentIterator它仍然是給我的錯誤「嘗試的操作被禁止,因爲它超出了管理員強制實施的列表視圖閾值」

更新:

string query2 = @"<Where><Eq><FieldRef Name='Project' /><Value Type='Text'>11759</Value></Eq></Where>"; 
SPQuery spquery = new SPQuery(); 
spquery.RowLimit = 10; 
spquery.Query = query2; 
spquery.QueryThrottleMode = SPQueryThrottleOption.Override; 
ContentIterator iterator = new ContentIterator(); 
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError); 

在每種情況下我都使用天氣SPCollectionItem或Iterator。當我通過spquery的where條件時。同樣的錯誤來了。

回答

0

你要麼不得不...

  • ...設置低於配置的閾值的RowLimit您的查詢。
  • ...或定義一個返回較少項目的查詢。
  • ...或change the threshold的列表。
+0

感謝 行的限制,定義和怎麼樣這個查詢 <值類型= \」文本\「> abc 它也給出了相同的錯誤,因爲返回結果的數量是1 – saurabh 2012-01-07 10:45:30

+0

您可以設置[SPQuery.QueryThrottleMode屬性](http://msdn.microsoft.com/en-us/library /microsoft.sharepoint.spquery.querythrottlemode。 aspx)到'Override'。這會改變什麼嗎? – Stefan 2012-01-07 11:53:30

+0

沒有成功。同樣的錯誤。 – saurabh 2012-01-07 14:59:08

0

你見過這樣的:

msdn link

hmmz,只是嘗試這樣做,它仍然給了一個錯誤。如果我用這個,但是我可以遍歷方式超過7K時listItems:

private int GetItems(SPList list){ 
    var query = new SPQuery(); 
    query.Query = ""; 
    query.QueryThrottleMode = SPQueryThrottleOption.Override; 
    var items = list.GetItems(query); 
    return items.Count; 

}

所以我的建議是隻使用list.getitems

+0

如果你嘗試在查詢中使用一些「where子句」,它會給油門錯誤 – saurabh 2012-01-12 17:11:54

+0

然後我不能幫你,因爲我試過了,它在這裏工作正常 – Tjassens 2012-01-13 11:16:37

0

你只需要改變你的查詢。

//Keep your query inside <View></View> tag. 
    string query = "<View><Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where><View>" 
    SPQuery spquery = new SPQuery(); 
    spquery.Query = query; 
    ContentIterator iterator = new ContentIterator(); 
    iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError) 

現在運行該程序,它將工作。

+0

運行 - 但現在SPQuery沒有被應用。 – 2012-04-27 10:27:32

1

有可能是因爲你是比較在現場沒有索引:http://msdn.microsoft.com/en-us/library/ff798465

如果你要建立一個返回前100個項目由ID字段排序 查詢,查詢將執行沒有問題因爲ID 列始終是索引的。但是,如果您要構建一個查詢,即 返回按非索引標題字段排序的前100個項目,則 查詢將不得不掃描內容數據庫中的所有10,000行,以 爲先,以按標題確定排序順序返回第一個 100個項目。因此,查詢會受到限制,因此這是一項資源密集型操作。