J'ai une requête Cosmos-db SDK V3 dans mon code C # et je peux exécuter la méthode Count dessus si " allowSynchronousQueryExecution " est défini sur true ou GetItemsQueryIterator utilisé pour s'exécuter de manière asynchrone.
Existe-t-il un autre moyen d'exécuter le compte de manière asynchrone d'une manière plus propre comme ci-dessous:
var count = await query.CountAsync();
Je sais que le SDK V2 prend en charge l'extrait de code ci-dessus.
3 Réponses :
Pour tous ceux qui trébuchent là-dessus, dans le SDK V3, vous pouvez effectuer les opérations suivantes:
var query = this.container.GetItemLinqQueryable<T>(
requestOptions: new QueryRequestOptions
{
PartitionKey = new PartitionKey(yourKey),
MaxItemCount = maxCount
}
)
.Where(yourPredicate);
var feedIterator = this.container.GetItemQueryIterator<T>(query.ToQueryDefinition());
var results = new List<T>();
while (feedIterator.HasMoreResults)
{
results.AddRange(await feedIterator.ReadNextAsync());
}
Voici l'un des exemple de fonction que j'ai utilisé avec SDK V3,
public async Task<T> GetByIdAsync(string id, object partitionKeyValue = null)
{
var options = this.EnsureRequestOptions(partitionKeyValue);
var sqlQuery = new QueryDefinition($"select * from {this.containerName} c where c.id = @id").WithParameter("@id", id);
var iterator = this.container.GetItemQueryIterator<T>(
sqlQuery,
requestOptions: options);
while (iterator.HasMoreResults)
{
var response = await iterator.ReadNextAsync().AnyContext();
this.LogRequestCharge(response.RequestCharge, response.ActivityId);
foreach (var result in response.Resource)
{
return result;
}
}
Vous pouvez maintenant utiliser le code dans votre question, si vous utilisez GetItemLinqQueryable ();
Assurez-vous d'inclure Microsoft.Azure.Cosmos.Linq dans vos instructions d'utilisation.
/ p>
Exemple:
IOrderedQueryable<MyClass> linqQueryable = container.GetItemLinqQueryable<MyClass>(); Response<int> count = await linqQueryable.CountAsync(); var charge = count.RequestCharge;
Si vous souhaitez obtenir les frais de demande et / ou d'autres détails, utilisez peut utiliser quelque chose comme ce qui suit:
XXX
Voir: https://github.com/Azure/azure-cosmos-dotnet- v3 / pull / 729 et https: // github. com / Azure / azure-cosmos-dotnet-v3 / pull / 776 pour plus de détails