クエリ結果をページ分割する
Microsoft.Azure.Cosmos.Container クラスでは、非同期ストリームがサポートされます。これは、複数ページの結果を反復処理するための最もシンプルで簡単な方法です。 結果を手動でページ分割するシナリオでは、フィード反復子を取得して、結果の各ページを読み取ることができます。
まず、実行する SQL クエリ文字列を定義し、それを QueryDefinition 型の変数のコンストラクター パラメーターとして使用します。
string sql = "SELECT * FROM products WHERE p.price > 500";
QueryDefinition query = new (sql);
次に、MaxItemCount プロパティを使用して QueryRequestOptions 型のオブジェクトを作成し、結果の各ページに対して返す項目の数を指定します。
QueryRequestOptions options = new()
{
MaxItemCount = 100
};
最後に、ジェネリック型と GetItemQueryIterator メソッドを使用して、新しい FeedIterator<> を作成します。
FeedIterator<Product> iterator = container.GetItemQueryIterator<Product>(query, requestOptions: options);
フィード反復子クラスには、サーバー側に返すページが他にもあることを示す HasMoreResults ブール型プロパティが含まれます。 このプロパティは、while ループ内で使用するのに適しています。 この反復子には、ReadNextAsync メソッドも含まれます。これは、次の項目セットを取得して、foreach ループで反復処理できる列挙可能なコレクションに格納します。
while(iterator.HasMoreResults)
{
foreach(Product product in await iterator.ReadNextAsync())
{
// Handle individual items
}
}