.net core 如何允许Odata选项应用于cosmos db集合并返回筛选记录
我需要在api上实现分页。我在下面做的是在api上启用OData查询,但它在从COSMOSDB获取所有记录后进行过滤,但我想从COSMOSDB获取过滤后的记录。如何将Odata查询选项转换为cosmos db查询选项.net core 如何允许Odata选项应用于cosmos db集合并返回筛选记录,.net-core,odata,azure-cosmosdb,paging,webapi,.net Core,Odata,Azure Cosmosdb,Paging,Webapi,我需要在api上实现分页。我在下面做的是在api上启用OData查询,但它在从COSMOSDB获取所有记录后进行过滤,但我想从COSMOSDB获取过滤后的记录。如何将Odata查询选项转换为cosmos db查询选项 controller.cs [Route("apps")] [HttpGet] [EnableQuery] public async Task<IActio
controller.cs
[Route("apps")]
[HttpGet]
[EnableQuery]
public async Task<IActionResult> GetAllApps(CancellationToken cancellationToken)
{
var user = this.GetUser();
var results = await this.appRepository.GetAppsForUserAsync(user, cancellationToken).ConfigureAwait(false);
return this.Ok(this.mapper.Map<AppHeader[]>(results));
}
在存储库中,尝试使用并查询。注意,我在这里使用的是较新的V3SDK,但在较旧的SDK中也应该存在相同的版本
//将'skip'和'top'参数作为存储库方法的输入。
列表。谢谢您的回答!。我会考虑这一点,但是如何将跳过和顶部PARS作为存储库方法的输入呢?如何对从客户端到控制器的绑定skip和top进行建模?您可以从控制器操作绑定到模型。我同意您的选择,但在这里,我希望在不使用较新的V3 SDK Microsoft.Azure.Cosmos的情况下实现该功能
AppRepository.cs
public async Task<IEnumerable<App>> GetAppsForUserAsync(User user, CancellationToken cancellationToken)
{
try
{
FeedOptions queryOptions = new FeedOptions
{
MaxItemCount = -1,
PartitionKey = new PartitionKey(user)
};
var query = this.factory.GetClient()
.CreateDocumentQuery<App>(
UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),
queryOptions)
.Where(resource => resource.UserList.Any(u => u.userId == user.Id))
.AsDocumentQuery();
List<App> results = new List<App>();
while (query.HasMoreResults)
{
cancellationToken.ThrowIfCancellationRequested();
var response = await query.ExecuteNextAsync<App>(cancellationToken).ConfigureAwait(false);
var app = this.mapper.Map<App[]>(response);
results.AddRange(app);
}
return results;
}
catch (DocumentClientException ex)
{
this.logger.LogError(ex, ex.Message);
throw;
}
}
Client.js
http://localhost:8303/api/appdefinitions/my?$skip=6&$top=4`