クエリ結果をページ分割する

完了

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
    }
}