Ich muss Datensätze zurückgeben, die beispielsweise das Datum 04.04.2013 haben. Das Datumsfeld im ODATA-Service gibt als {DATE: "2013-04-04T17: 39: 33.663"}
zurückWie soll die Abfrage aussehen?
Bis jetzt habe ich drei Möglichkeiten gesehen, um dies zu tun, aber keiner von ihnen ist geradlinig.
Option 1: datetime'2013-04-04T12: 00 ': Dies erfordert eine Angabe der Zeit
Option zwei: Monat (DATE) Eq 04 Tag (DATE) Eq 04 Jahr (DATE) Eq 2013: das ist umständlich
Option drei: Verwenden Sie Option eins mit 'ge' und 'le', um Datensätze zwischen zwei Daten zu erhalten: das ist auch Mist.
Dies sollte sehr einfach sein, wie es in T-SQL ist.
OData v3 hat keinen primitiven Datentyp, der nur Date
ist. Die Eigenschaft, die Sie haben, ist entweder ein DateTime
oder ein DateTimeOffset
, also gibt es, ob Sie es benutzen oder nicht, ein Zeitteil dieses Wertes, und wenn Sie den Wert für die Gleichheit überprüfen möchten, die Zeit Komponente muss auch überprüft werden.
Wenn Sie sicher sind, dass Sie den Zeitabschnitt nie verwenden (und immer auf 00:00 setzen), könnten Sie die folgende Abfrage ausführen:
%Vor%was einen Zeitanteil von 00:00 impliziert. Aber das ist nur Kurzschrift. Und Sie könnten unerwartete Ergebnisse haben, wenn einige Ihrer DateTimes mit Zeitabschnitten enden, die nicht 00:00 sind.
Wenn Sie also nur den Datumsteil des Wertes und nicht die vollständige Gleichheit überprüfen wollen, ist der zweite Ansatz, den Sie erwähnen, der beste Weg, um darüber zu sprechen:
%Vor%Auf diese Weise überprüfen Sie genau, was Sie vorhaben zu überprüfen und nichts mehr.
Für was es wert ist, glaube ich, dass ein Date
Datentyp in OData v4 kommt. Dann können Sie die Gleichheitsprüfung verwenden, ohne sich um die Uhrzeit Gedanken machen zu müssen.
Außerdem möchte ich sagen, dass Sie LINQPAD auch für die Generierung von OData-Anfragen verwenden können. Sie sollten eine LINQ-Anfrage machen, und LINQPAD wird den korrekten URI erzeugen. Zum Beispiel:
von ev in Veranstaltungen wo ev.Start & gt; = DateTime.Now.Date Wähle ev
ausLINQPAD generiert Odata-URI:
%Vor%Stellen Sie es auf das richtige Format ein. In meinem Fall lösche ich "+01: 00".
Sie können auch Visual Studio verwenden, um eine Odata-Anfrage zu erhalten.