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