Date ODATA日期查询
我需要返回日期为2013年4月4日的记录(例如)。 ODATA服务中的日期字段返回为{date:“2013-04-04T17:39:33.663”} 查询应该是什么样子的 到目前为止,我已经看到了三种选择,但没有一种是直接的 选项一:日期时间'2013-04-04T12:00':这需要指定时间 选项二:月(日期)eq 04日(日期)eq 04年(日期)eq 2013:这很麻烦 选项三:使用选项一中的“ge”和“le”来获取两个日期之间的记录:这也是废话Date ODATA日期查询,date,odata,Date,Odata,我需要返回日期为2013年4月4日的记录(例如)。 ODATA服务中的日期字段返回为{date:“2013-04-04T17:39:33.663”} 查询应该是什么样子的 到目前为止,我已经看到了三种选择,但没有一种是直接的 选项一:日期时间'2013-04-04T12:00':这需要指定时间 选项二:月(日期)eq 04日(日期)eq 04年(日期)eq 2013:这很麻烦 选项三:使用选项一中的“ge”和“le”来获取两个日期之间的记录:这也是废话 这应该是非常简单的,因为它是在T-SQL中
这应该是非常简单的,因为它是在T-SQL中 ODataV3没有一个仅为
Date
的基本数据类型。您拥有的属性是DateTime
或DateTimeOffset
,因此,无论您是否使用它,该值都有一个时间部分,如果要检查该值是否相等,则必须同时检查时间分量
如果您确定从不使用时间部分(并始终将其设置为00:00),则可以执行以下查询:
/service.svc/EntitySet?$filter=DateProperty+eq+datetime'2013-04-04'
这意味着时间部分为00:00。但那只是速记。如果你的一些日期时间最后的时间部分不是00:00,你可能会得到意想不到的结果
因此,考虑到您只想检查值的日期部分,而不是完全相等,我认为您提到的第二种方法是最好的方法:
/service.svc/EntitySet?$filter=day(DateProperty)+eq+4+and+month(DateProperty)+eq+4+and+year(DateProperty)+eq+2013
这样,你就可以准确地检查你想要检查的东西,仅此而已
值得一提的是,我相信odatav4中会出现
Date
数据类型。然后,您就可以使用平等性检查,而不用担心时间。此外,我想说的是,您还可以使用生成OData请求。您应该发出LINQ请求,LINQPAD将生成正确的URI。例如:
- 林克:
- LINQPAD生成Odata URI: http://yoursite/_vti_bin/listdata.svc/Events()?$filter=Start ge datetime'2013-12-05T00:00:00+01:00' http://yoursite/_vti_bin/listdata.svc/Events()?$filter=开始ge日期时间'2013-12-05T00:00:00+01:00'
- 将其调整为正确的格式。就我而言,我删除“+01:00”