2013-04-24 15 views
8

日付が2012年4月4日のレコードを返す必要があります(たとえば)。 ODATAサービスの日付フィールドは、{DATE: "2013-04-04T17:39:33.663"}ODATA DATE QUERY

のようになります。クエリはどのように見えますか?

これまでのところ私は3つのオプションを見てきましたが、どれもまっすぐではありません。

オプション1:datetime'2013-04-04T12:00' :これは、時間を指定する必要があり

オプション2:本:月(DATE)は04日(DATE)EQ 04年(DATE)EQ 2013 eqで

オプション3:2つの日付の間でレコードを取得するために 'ge'と 'le'のオプション1を使用する:これも駄目です。

これはT-SQLと同じように非常に簡単です。

答えて

12

OData v3には、Dateのプリミティブデータ型がありません。あなたが持っているプロパティはDateTimeまたはDateTimeOffsetなので、使用しているかどうかにかかわらず、その値の時間部分があり、等しいかどうかの値をチェックする場合は、時間コンポーネントをチェックする必要があります同じように。

あなたは決して時間の部分を使用していない(と常に0時00に設定)することを確実にわかっている場合、あなたでし次のクエリを実行します。

/service.svc/EntitySet?$filter=DateProperty+eq+datetime'2013-04-04' 

00の時刻部分を意味します:00。しかしそれはちょうど省略したものです。そして、あなたのDateTimeのいくつかが00:00でない時間部分で終わってしまうと、予期しない結果を招く可能性があります。だから、

、あなただけの日付値の部分ではなく、完全な平等をチェックすることを考えると、私はあなたが言及して第二のアプローチはそれについて行くの最良の方法だと思う:

/service.svc/EntitySet?$filter=day(DateProperty)+eq+4+and+month(DateProperty)+eq+4+and+year(DateProperty)+eq+2013 

その方法あなたは何をチェックしているのかというだけのことを正確にチェックしています。

Dateデータ型がOData v4に入っていると思います。そうすれば、時間を気にせずに平等チェックを使うことができます。

+0

最初の部分はoData V3で私にとっては機能しません – Matt

2

さらに、ODataリクエストの生成にLINQPADを使用することもできます。 LINQリクエストを行い、LINQPADが正しいURIを生成するようにしてください。

  • LINQの:例えば
  • ev.Start> = DateTime.Now.Date 選択EV

    • LINQPADはODATA URIを生成イベント におけるEVから

    http://yoursite/_vti_bin/listdata.svc/Events()?$filter=Start ge datetime'2013-12-05T00:00:00+01:00'
  • 正しい形式。私の場合、私は "+01:00"を削除します。

また、Visual Studioを使用してOdataリクエストを取得することもできます。