Я использую код из проекта Azure, когда CosmosDB создается впервые. У него хороший общий GetItemsAsync
метод.
Я немного изменил его, чтобы иметь следующее:
public static async Task<List<T>> GetItemsAsync(Expression<Func<T, bool>> predicate, int maxItemCount = -1)
{
IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
new FeedOptions { MaxItemCount = maxItemCount })
.Where(predicate)
.AsDocumentQuery();
List<T> results = new List<T>();
while (query.HasMoreResults)
{
results.AddRange(await query.ExecuteNextAsync<T>());
if (maxItemCount != -1)
{
break;
}
}
return results;
}
В некоторых вызовах этого метода мне нужно добавить запрос OrderBy
. Проблема в том, что у меня есть пара коллекций в одном и том же CosmosDB, и поля разные. Когда я хочу перечислить одну из коллекций, я просто хочу получить последние.
Так что в этом примере я на самом деле отправляю count как 50, поэтому я получу только 50, но я также хочу получить последние. Приведенный выше код возвращает самые старые 50, как и ожидалось. Есть ли какое-нибудь решение этого? Я предполагаю, что может быть способ сначала получить последние данные, а когда я позвоню 50, это будут последние 50 записей.
Другая вещь, которую я попытался, состояла в том, чтобы создать другой метод с именем GetItemsWithOrderByAsync
и попытался дать Expression>, но для поддержки TKey требуется так много изменений во всем классе.