クエリ クライアント
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
この SDK には、クエリを実行するクエリ クライアントがあります。
[!注] 次のコード例の
client
変数はIMClient
インスタンスを意味します。スクリプト SDK を使用する場合、このインスタンスは自動的に作成され、
MClient
という名前が付けられます。Web SDK を使用する場合、変数名は自由に選択できますが、ドキュメントの例では
client
という名前が使われています。
クエリの作成
クエリの作成の詳細については、「LINQ セクションを使用したクエリの作成」を参照してください。
クエリ結果の処理
クエリの実行後、IQueryResult
が返されます。 この結果には、次のプロパティがあります。
Items
: クエリに一致したエンティティ/ID (合計結果全体のサブセットとなる場合があります)TotalNumberOfResults
: Sitecore Content Hub のクエリに一致したアイテムの数 (Items
に含まれていないアイテムも含みます)。Offset
: スキップされたアイテムの数。
単一のエンティティに対するクエリ
クエリが単一のエンティティのみに一致することが確実な場合は、SingleAsync
メソッドの使用が便利です。
IEntity entity = await client.Querying.SingleAsync(query);
[!注意] クエリに複数のアイテムが一致する場合、
InvalidOperationException
がスローされます。
単一のエンティティ ID に対するクエリ
クエリが単一のエンティティのみに一致することが確実な場合は、SingleIdAsync
メソッドの使用が便利です。
long? entityId = await client.Querying.SingleIdAsync(query);
[!注意] クエリに複数のアイテムが一致する場合、
InvalidOperationException
がスローされます。
1 つまたは複数のエンティティに対するクエリ
1 つまたは複数のエンティティに対してクエリを実行するには、次のようにします。
IEntityQueryResult queryResult = await client.Querying.QueryAsync(query);
IEntityQueryResult.Items
には、返されたエンティティが含まれています。
1 つまたは複数のエンティティ ID に対するクエリ
1 つまたは複数のエンティティ ID に対してクエリを実行するには、次のようにします。
IIdQueryResult queryResult = await client.Querying.QueryIdsAsync(query);
IIdQueryResult.Items
には、返された ID (long
形式) が含まれています。
クエリ結果エンティティの反復
クエリが小サイズから中程度のサイズの結果を返す場合 (既定の設定では最大 10,000 件の結果)、イテレーターを使用してエンティティを簡単にバッチ処理できます。
次のスニペットは、イテレーターを作成しています。
IEntityIterator iterator = client.Querying.CreateEntityIterator(query);
次のスニペットでは、イテレーターを使用してエンティティをバッチ処理しています。
while (await iterator.MoveNextAsync())
{
var entities = iterator.Current.Items;
// Do something with the entities
}
イテレーターがエンティティのすべてのバッチの処理を終了すると、while ループは自動的に終了します。
[!注意] イテレーターが設定された最大結果数を超えると、サーバーは例外をスローします。 その場合は、スクロールが必要になります。
クエリ結果エンティティ ID の反復
クエリが小サイズから中程度のサイズの結果を返す場合 (既定の設定では最大10,000 件の結果)、イテレーターを使用してエンティティ ID を簡単にバッチ処理できます。
次のスニペットは、イテレーターを作成しています。
IIdIterator iterator = client.Querying.CreateIdIterator(query);
次のスニペットでは、イテレーターを使用してエンティティ ID をバッチ処理しています。
while (await iterator.MoveNextAsync())
{
var ids = iterator.Current.Items;
// Do something with the ids
}
イテレーターがエンティティのすべてのバッチの処理を終了すると、while ループは自動的に終了します。
[!注意] イテレーターが設定された最大結果数を超えると、サーバーは例外をスローします。 その場合は、スクロールが必要になります。
非推奨ノート
Query
クラスに、EntityLoadOptions
プロパティと LoadConfiguration
プロパティを設定することが可能です。 1 つ目のプロパティは過去の WebApiClient SDK で使用されていましたが、3.0 では非推奨になりました。 3.1 では、Query
クラスと読み込み設定が分離されました。 これらのプロパティの使用は控えることをお勧めしますが、必要に応じて、クエリ オブジェクトを渡すときの追加のパラメーターとして読み込み設定を渡せます。