gpt4 book ai didi

sql - CosmosDB 通用 OrderBy 查询或先获取最后的数据

转载 作者:行者123 更新时间:2023-12-03 01:05:15 26 4
gpt4 key购买 nike

第一次创建 CosmosDB 时,我使用的是 azure 项目中的代码。它有一个很好的通用 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 中有几个集合,并且字段不同。当我想列出其中一个系列时,我只想获得最新的系列。

所以在这个例子中,我实际上发送的计数为 50,所以我只会得到 50,但我也想得到最近的。上面的代码按预期返回最旧的 50 个。这个有什么解决办法吗?我猜测可能有一种方法可以先获取最新数据,当我调用 50 时,它将是最新的 50 条记录。

我尝试的另一件事是创建另一个名为 GetItemsWithOrderByAsync 的方法,并尝试给出 Expression>,但它需要在整个类中进行大量修改才能支持 TKey。

最佳答案

好吧,经过一番尝试,我想出了以下解决方案。创建了新方法并且:

 public static async Task<List<T>> GetItemsWithOrderByAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> orderByPredicated, int maxItemCount = -1)
{
IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
new FeedOptions { MaxItemCount = maxItemCount }).
Where(predicate).
OrderByDescending(orderByPredicated).
AsDocumentQuery();

List<T> results = new List<T>();
while (query.HasMoreResults)
{
results.AddRange(await query.ExecuteNextAsync<T>());
if (maxItemCount != -1)
{
break;
}
}

return results;
}

关于sql - CosmosDB 通用 OrderBy 查询或先获取最后的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com