OData:时间操作

时间:2015-09-15 14:14:14

标签: c# entity-framework asp.net-web-api odata

我有一个ASP.NET WebAPI服务,它将json结果提供给客户端JS webapp。

网络客户端使用OData (v4)来过滤请求 服务器端使用一个瘦实体框架层,它只将OData过滤器应用于返回的数据集。

数据库中的数据包含一个CallStart字段,其中包含特定于该项目的日期时间。

我希望在客户端上能够将自定义过滤器应用于 CallStart字段的时间部分,而不管date部分。

在客户端上,用户指定小时,分钟和操作数 允许的操作数为ge, le, eq, ne

实现这一目标的最简单方法是什么?

第一次尝试是构建OData表达式:

function getODataFilter(hour, minute, operation) {
    return "(hour(CallStart) " + operation + " " + hour 
            + " and minute(CallStart) " + operation + " " + minute) 

但当然这不起作用。如果我打电话,例如,getODataFilter(12,33,' ge')并且过滤掉了,我将获得15:34但不是15:32的项目,因为它只检索项目minutes部分为> 33的位置。

现在我可以看到两种可能性,其中没有一种看起来非常吸引人:

  1. 为每个操作创建更复杂的OData表达式,例如:
  2. (hour(CallStart) eq {hour} and minute(CallStart) ge {minute}) or (hour(CallStart) ge hour)

    1. 在数据库中添加一个新的计算列,只保存CallStart的时间部分保存为...某事(如午夜以来的刻度),将客户端时间转换为数值,并且只是比较简单的数字。
    2. 是否有第三种,更好(更简单?)的方法?

0 个答案:

没有答案