Ответ зависит от вашего запроса.
Две части кода, которые вы разместили, не совпадают.
Чтобы они были одинаковыми, второй должен выглядеть так:
var collectionUri = UriFactory.CreateDocumentCollectionUri(CDBdatabase, CDBcollection);
var query = documentClient.CreateDocumentQuery<ConsumerDetails>(
collectionUri)
.Where(f => f.Id == consumerId)
.AsDocumentQuery();
List<ConsumerDetails> results = new List<ConsumerDetails>();
while (query.HasMoreResults)
{
results.AddRange(await query.ExecuteNextAsync<ConsumerDetails>());
}
return results.FirstOrDefault();
В обоих случаях это SQL, который вы будете выполнять против CosmosDB.
Тем не менее, в случае LINQ, LINQ переводчик включится, чтобы преобразовать ваше выражение в запрос SQL.
Также в примере SQL, поскольку вы указываете прямо на строчную букву id
(которая является CosmosDB id
), которая также является ключом раздела, CosmosDB распознает это и ограничит запрос от перекрестного раздела до раздел конкретный, что делает его быстрее и дешевле. .Where(f => f.Id == consumerId)
(с заглавными буквами Id
) после прохождения через поставщика LINQ будет преобразовано в SELECT * FROM c where c.Id = consumerId
, если только не существует JsonAttribute("id")
, украшающего свойство Id
. Это означает, что вам нужно предоставить значение PartitionKey
в FeedOptions
для запроса.