Date ODATA日期查询

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中

我需要返回日期为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中

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。例如:

  • 林克:
事件中的ev 其中ev.Start>=DateTime.Now.Date 选择电动汽车

  • 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”

您还可以使用VisualStudio获取Odata请求