2015-09-12 5 views
1

Есть ли эффективный способ получения первого документа из запроса? Обычно это будет использовать FirstOrDefault() с коллекциями LINQ или TOP в SQL.DocumentDb: Получить первый документ

Say коллекция выглядит примерно так:

{ 
    name: "John", 
    position: 3 
}, 
{ 
    name: "Mary", 
    position: 1 
}, 
{ 
    name: "Peter", 
    position: 2 
} 

Мне нужно получить только один документ с наивысшим положением значения. То есть документ «Мэри» в этом случае.

Использование # SDK C, я бы выполнить что-то вроде этого:

Client.CreateDocumentQuery<T>(Collection.DocumentsLink) 
    .Where(somethingOtherCriteria); 
    .OrderByDescending(x => x.Position) 
    .AsEnumerable() 
    .FirstOrDefault()); 

Это возвращает все документы в коллекции (после применения соответствующего фильтра), а затем извлечение первый из списка. Это все равно может привести к появлению тысяч ненужных документов по проводам.

Невозможно выполнить FirstOrDefault() на сервере?

ответ

1

Один из вариантов, чтобы установить максимальный размер ответа на 1, и захватить только первую страницу из итератора запроса:

var query = client.CreateDocumentQuery<Family>(collectionLink, "SELECT * FROM myCollection", new FeedOptions { MaxItemCount = 1 }).AsDocumentQuery(); 
var feedResponse = await query.ExecuteNextAsync<Family>(); 
0

Вы ищете Take(), это функция Linq, что сопоставляется TOP в запросе. Поэтому вы хотите что-то вроде

 var query = client.CreateDocumentQuery<MyType>(collectionAddress) 
      .Where(x => x.Value == myValue) 
      .Take(1); 
Смежные вопросы