Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ODataV4是否支持日期值的聚合?_Odata_Odata V4 - Fatal编程技术网

ODataV4是否支持日期值的聚合?

ODataV4是否支持日期值的聚合?,odata,odata-v4,Odata,Odata V4,我正在寻找一种OData查询语法,它有助于解决我们在SqlServer中所做的Sum((DateDiff,minute,StartDate,EndDate)。使用OData v4是否可以做这样的事情 我尝试了聚合函数,但无法在duration类型上使用sum运算符。有什么想法吗?您不能在符合标准的v4服务中直接执行这样的查询,因为内置聚合都在单个字段上运行,例如,不支持创建新的任意列以将结果投影到其中,我s主要是因为新列未定义。通过将规范限制为仅在资源本身中预定义的列,我们可以对将返回的数据的结

我正在寻找一种OData查询语法,它有助于解决我们在SqlServer中所做的Sum((DateDiff,minute,StartDate,EndDate)。使用OData v4是否可以做这样的事情


我尝试了聚合函数,但无法在duration类型上使用sum运算符。有什么想法吗?

您不能在符合标准的v4服务中直接执行这样的查询,因为内置聚合都在单个字段上运行,例如,不支持创建新的任意列以将结果投影到其中,我s主要是因为新列未定义。通过将规范限制为仅在资源本身中预定义的列,我们可以对将返回的数据的结构有很强的确定性

如果您是API的作者,那么有三种常见的方法可以实现与您的请求类似的查询

  • 定义一个,这是一种比必要的更复杂的方式,但这意味着您可以定义一次聚合并在许多资源查询中使用它

    • 只有当您确实需要在多个资源上重用相同的聚合时,才研究此解决方案
  • 定义一个自定义函数来计算查询中所有或某些元素的结果

    • 将函数想象成类似于SQL视图的函数,它实际上只是表示与资源关联的自定义查询和自定义响应对象的一种方式
    • 通常使用函数来应用复杂的筛选条件,这些条件仍然返回它们绑定到的资源,但如果需要,可以返回完全不同的数据结构
  • 利用开放类型,这有时可能比您预期的更费劲,但如果您只希望将少量常见转换应用于资源并将其结果作为标准资源定义之外的离散属性进行投影,则可以进行管理

    • 在您的例子中,您可以将
      DateDiff(minute,StartDate,EndDate)
      投影到它自己的离散列中,可能称为
      Minutes
      Duration
      。然后您可以
      $apply
      在这个新字段中应用一个简单的
  • 公开自定义函数通常是最省力的方法,因为您根本不受结果形状的约束,它可以与主资源相对隔离地维护,就像开放类型一样,函数的有用之处在于调用方仍然可以将OData聚合应用于函数的结果

    如果原始文章更新了一些更详细的代码示例,我可以介绍函数实现,但是在这种情况下,我希望这些信息能让您走上正确的道路


    虽然OData聚合很方便,但实现自定义函数为您做到这一点的速度要快9/10。这是您的API吗?您是否对使用自定义函数的解决方案持开放态度?如果是这样,请使用更多信息更新您的帖子,如您尝试复制的完整SQL查询和一些示例结果。还有很多其他信息r增加了使用可演示功能的好处。