Я использую версию 3 (предварительная версия) Cosmos DB SDK для .NET.
При получении элемента с помощью ReadItemAsync результат имеет ETag, доступный из оболочки CosmosItemResponse объекта сущности SalesOrder:
CosmosItemResponse<SalesOrder> itemResponse =
await container.Items.ReadItemAsync<SalesOrder>(
partitionKey: "Account1",
id: "SalesOrder1");
Console.WriteLine("ETag of read item - {0}", itemResponse.ETag);
Но при получении элемента с помощью CreateItemQuery (передача SQL) результат помещается в CosmosQueryResponse, содержащий только массив элементов вместо массива CosmosItemResponse strong>, поэтому я не могу получить ETag каждого элемента. Определение сущности Семья находится по адресу конец этого файла.
var query = new CosmosSqlQueryDefinition("SELECT * FROM Families f WHERE f.id = @id AND f.Address.City = @city")
.UseParameter("@id", "AndersonFamily")
.UseParameter("@city", "Seattle");
List<Family> results = new List<Family>();
var resultSetIterator = container.Items.CreateItemQuery<Family>(query, partitionKey: "Anderson");
while (resultSetIterator.HasMoreResults) {
results.AddRange((await resultSetIterator.FetchNextSetAsync()));
}
Я не могу найти других способов получить элементы с помощью SQL, поэтому ETag возвращается вместе с самим элементом. У кого-нибудь есть решение?