如何在web api odata中返回OrderItems价格(ItemTotalPrice)的总和?
看起来web api odata不支持$ apply,如下所述:http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs01/odata-data-aggregation-ext-v4.0-cs01.html#_Aggregation_Methods_1
我有一个web api odata查询,如:
http://localhost:29446/odata/OrderItems
返回以下json:
{
"odata.metadata": "http://localhost:29446/odata/$metadata#OrderItems",
"value": [{
"OrderItemID": 17,
"ItemDescription": "test",
"ItemQty": 1,
"ItemUnitPrice": "1.10",
"ItemTaxGroup": 1,
"ItemTotalTax": "0.10",
"ItemTotalPrice": "1.22",
"ItemSubProgram": 1,
"ItemAccount": 1,
"ItemActualCost": "1.22",
"OrderID": 3
}, {
"OrderItemID": 18,
"ItemDescription": "test",
"ItemQty": 1,
"ItemUnitPrice": "1.10",
"ItemTaxGroup": 1,
"ItemTotalTax": "0.10",
"ItemTotalPrice": "1.10",
"ItemSubProgram": 1,
"ItemAccount": 1,
"ItemActualCost": "1.00",
"OrderID": 3
}, {
"OrderItemID": 19,
"ItemDescription": "test",
"ItemQty": 1,
"ItemUnitPrice": "1.10",
"ItemTaxGroup": 1,
"ItemTotalTax": "0.10",
"ItemTotalPrice": "1.10",
"ItemSubProgram": 1,
"ItemAccount": 1,
"ItemActualCost": "1.00",
"OrderID": 3
}, {
"OrderItemID": 20,
"ItemDescription": "test",
"ItemQty": 1,
"ItemUnitPrice": "1.10",
"ItemTaxGroup": 1,
"ItemTotalTax": "0.10",
"ItemTotalPrice": "1.10",
"ItemSubProgram": 1,
"ItemAccount": 1,
"ItemActualCost": "1.00",
"OrderID": 3
}, {
"OrderItemID": 21,
"ItemDescription": "test",
"ItemQty": 1,
"ItemUnitPrice": "1.10",
"ItemTaxGroup": 1,
"ItemTotalTax": "0.10",
"ItemTotalPrice": "1.10",
"ItemSubProgram": 1,
"ItemAccount": 1,
"ItemActualCost": "1.00",
"OrderID": 3
}]
}
我认为以下可能有效:
http://localhost:29446/odata/OrderItems?$apply=aggregate(ItemTotalPrice with sum as Total)
但是我收到以下错误:
The query parameter '$apply' is not supported.
我正在使用ODAP v4和Web API 2.2
2 回答
对于OData v4,Web API 2.2中尚未实现数据聚合扩展 . 在.NET OData库的Github存储库上提供了对ODataLib级别实现的拉取请求:https://github.com/OData/odata.net/pull/6但尚未合并到主分支中 .
解决方案是使用
.QueryByCube
LINQ运算符(www.adaptivelinq.com)实现WebAPI控制器 .免责声明:我是AdaptiveLINQ开发人员 .