クエリからSpquery TotalItemsを入手してください
-
10-12-2019 - |
質問
私のクエリに一致するものの総数を取得したいだけでなく、結果も制限したい。
- それでは、リストに100個の項目があります。 リスト内の100項目の
- 50
- 私は50の10を取得したいだけです。
- どうすれば「50」を手に入れることができますか?
単純なクエリ:
.SPQuery query = new SPQuery() { Query = "<OrderBy><FieldRef Name='FullName' /></OrderBy><Where><Contains><FieldRef Name='FirstName' /><Value Type='Text'>e</Value></Contains></Where>" }; SPList oList = web.Lists["Profile"]; SPListItemCollection items = oList.GetItems(query); int count = items.Count;
解決
これはよく知られており、特に大量のデータに関しては問題を解決することが非常に困難です。 SharePointに触れていない場合は、多くのシステム(Googleが明らかな例である)を返すことに気づいた可能性があります。
基本的にあなたができる唯一のことは、同じクエリを実行することですが、結果からIDを除く権限とすべてのフィールドを除外することです。 SQLに関しては、それはこのようなものになるでしょう:
SELECT id FROM list WHERE (filter)
.
Webアプリケーション設定で見つけることができるリスト内に5000項目を超える項目(または「スロットリング制限」設定値を超えるその他の値)がある場合は、参加するすべてのフィールドをにする必要があります。インデックス(「リスト設定」ページの「索引付き列」リンク)、およびを参照してください。 (これらは、ルックアップ、管理メタデータ、人およびグループ、ワークフローステータス)。
また、このクエリでさえ、いくつかの大きな数、言う、またはこのようなものでも、次のようになるので、次のようになります。
.
SELECT TOP 100000 id FROM list WHERE (filter)
だから、それはどのようにスパークに適用されるのか?
.
var query = new SPQuery()
{
// please make sure FirstName and FullName fields are added to index!!
Query = "<OrderBy><FieldRef Name='FullName' /></OrderBy><Where><Contains><FieldRef Name='FirstName' /><Value Type='Text'>e</Value></Contains></Where>",
ViewFields = "ID",
ViewFieldsOnly = true,
IncludePermissions = false,
RowLimit = 100000
};
大量のアイテムがある場合、または重い(SQLの点で)フィルタが多い場合は遅くなることに注意してください。
他のヒント
リアルタイムクエリは、それを通して繰り返さずにリスト内のアイテムを数えることができるような方法ではありません。
もeite itemcountとlist.items.countが異なる場合には異なる数字を返します。
大規模リストの場合、この決定の背後にある推論があります。 > http://technet.microsoft.com/en-us/library/cc262813.aspx.