c# - .Net Core 2.2 中的 OData:如何获取项目总数?
问题描述
我使用 OData v7.1 创建了一个新的 .NET Core 2.2 Web 应用程序。
我已经启动并运行了,并且已经可以使用 $top、$skip、...
我现在正试图让 $count 正常工作,但我完全不知道该怎么做。
我已经尝试了几个链接,它们要么不再编译,要么不产生我想要的结果。
我有的 :
在StartUp.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
routes.EnableDependencyInjection();
routes.Expand().Select().OrderBy().Filter().MaxTop(null).Count();
});
在我的控制器类中:
[EnableQuery]
[HttpGet("[action]")]
public IActionResult All()
{
var assets = _service.GetAllAssets();
return Ok(assets);
}
这将返回所有资产,我可以使用 $top 和 $skip 没问题。现在如何添加 $count=true 或任何其他允许我返回总计数的方法?我究竟做错了什么?
有效的示例网址: http://localhost/api/Assets/All ?$top=20&$skip=20
不起作用的网址: http://localhost/api/Assets/All ?$count=true(它返回所有资产)
目前的结果是:
[{Item One}, {Item Two}]
我想要的结果是:
[Count : 4,
Items: [{Item One}, {Item Two}
]
解决方案
你可以这样做:
public IActionResult GetData(ODataQueryOptions<YourType> query)
{
var data = _context.SetOfYourType;
return Ok(new
{
Items = query.ApplyTo(data),
Count = query.Count?.GetEntityCount(query.Filter?.ApplyTo(data, new ODataQuerySettings()) ?? data)
});
}
这基本上产生与使用 PageResult 相同的结果,至少在 $expand、$select 和 $count 方面。
推荐阅读
- angular - 角度单元测试错误 - 无法读取未定义的属性“订阅”
- php - 在 Woocommerce 单品上同步多个 ajax 添加到购物车按钮
- python - 当我导入`from concurrent.futures import ThreadPoolExecutor`时,它给了我 ImportError。有谁知道为什么?
- python - AttributeError:“工作簿”对象没有属性“写入”
- angular - 即使启用了 gzip 压缩,Nginx 服务器也不会读取 Gzip 文件
- python - 在 Numpy 中应用不带 for 循环的非平凡矩阵计算
- javascript - 如何替换数组中的元素?
- java - 通知意图 - 如何在不重置的情况下恢复通知中的活动?
- dart - Dart BrowserClient 中的响应标头
- c - 为什么函数看不到“NULL”字符