我正在寻找一种OData查询语法,该语法有助于解决我们在SqlServer中执行的Sum((DateDiff(minute,StartDate,EndDate))。是否可以使用OData v4进行此类操作?
我尝试了合计函数,但是不能在持续时间类型上使用sum运算符。有想法吗?
答案 0 :(得分:0)
您无法直接在符合标准的v4服务中执行类似的查询,因为内置的聚合都在单个字段上运行,例如,不支持创建新的任意列进行投影结果放入,这主要是因为新列未定义。通过将规范限制为仅在资源本身中预定义的列,我们可以对将返回的数据的结构具有高度的确定性。
如果您是API的作者,可以通过三种常用方法来实现与您的请求类似的查询。
定义一个Custom Data Aggregate,这比必要时要复杂得多,但这意味着您可以定义一次聚合,并在许多资源查询中使用它。
定义自定义 Function 来计算查询中所有或某些元素的结果。
利用开放类型,这有时可能比您预期的要费力,但是如果您只想将少量通用转换应用于资源并将其结果投影为离散属性,则可以对其进行管理到标准资源定义。
DateDiff(minute, StartDate, EndDate)
投影到其自己的离散列中,该列可能称为Minutes
或Duration
。然后,您可以在这个新字段中$apply
一个简单的SUM
。公开自定义函数通常是最省力的方法,因为您完全不受结果形状的限制,可以与主要资源相对隔离地进行维护,就像使用开放类型一样,函数是有用的是调用者仍然可以将OData聚合应用于Function的结果。
如果原始帖子中更新了一些更详细的代码示例,则我可以详细介绍函数的实现,但是在这种状态下,我希望这些信息可以使您走上正确的道路。