たとえば、2013年4月4日の日付のレコードを返す必要があります。 ODATAサービスの日付フィールドは{DATE: "2013-04-04T17:39:33.663"}として返されます
クエリはどのように見えるはずですか?
これまで、これを行うための3つのオプションを見てきましたが、どれも簡単ではありません。
オプション1:日時 '2013-04-04T12:00':これには時間の指定が必要です
オプション2:月(日付)eq 04日(日付)eq 04年(日付)eq 2013:これは面倒です
オプション3:オプション1を「ge」と「le」とともに使用して2つの日付の間のレコードを取得する:これもがらくたです。
これは、T-SQLの場合と同様に、非常に単純なはずです。
OData v3には、Date
だけのプリミティブデータ型はありません。所有しているプロパティはDateTime
またはDateTimeOffset
のいずれかであるため、使用しているかどうかに関係なく、その値の時間部分があり、チェックする場合は等しい値の場合、時間コンポーネントもチェックする必要があります。
時間部分を決して使用しない(そして常に00:00に設定する)ことが確実にわかっている場合は、could次のクエリを実行します。
/service.svc/EntitySet?$filter=DateProperty+eq+datetime'2013-04-04'
これは、00:00の時間部分を意味します。しかし、それは単なる速記です。また、DateTimeの一部が00:00以外の時間部分になってしまうと、予期しない結果が生じる可能性があります。
したがって、値の日付部分を確認するだけで、完全に等しいわけではないことを考えると、2番目のアプローチが最善の方法だと思います。
/service.svc/EntitySet?$filter=day(DateProperty)+eq+4+and+month(DateProperty)+eq+4+and+year(DateProperty)+eq+2013
そうすれば、チェックする意味を正確にチェックし、それ以上のことは何もしません。
その価値については、Date
データ型がODatav4で提供されると思います。そうすれば、時間を気にせずに等価性チェックを使用できるようになります。
さらに、ODataリクエストの生成に [〜#〜] linqpad [〜#〜] を使用することもできます。 LINQリクエストを行う必要があり、LINQPADは正しいURIを生成します。例えば:
ev.Start> = DateTime.Now.Date selectevのイベントのevから
LINQPADはOdataURIを生成します。
http://yoursite/_vti_bin/listdata.svc/Events()?$ filter = Start ge datetime '2013-12-05T00:00:00 + 01:00'
正しいフォーマットに調整してください。私の場合、「+ 01:00」を削除します。
また、VisualStudioを使用してOdataリクエストを取得することもできます。