我有一个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
的位置。
现在我可以看到两种可能性,其中没有一种看起来非常吸引人:
(hour(CallStart) eq {hour} and minute(CallStart) ge {minute})
or (hour(CallStart) ge hour)
CallStart
的时间部分保存为...某事(如午夜以来的刻度),将客户端时间转换为数值,并且只是比较简单的数字。是否有第三种,更好(更简单?)的方法?