如何使用web api odata获取子记录的总和?

时间:2014-11-25 18:46:00

标签: odata asp.net-web-api

如何在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 个答案:

答案 0 :(得分:1)

在ODAP v4的Web API 2.2中尚未实现数据聚合扩展。有一个关于.NET OData库的Github存储库贡献的ODataLib级别实现的拉取请求:https://github.com/OData/odata.net/pull/6但尚未合并到主分支中。

答案 1 :(得分:0)

解决方案是使用.QueryByCube LINQ运算符(www.adaptivelinq.com)实现Web API控制器。

免责声明:我是自适应LINQ开发人员。