ODATA DATUMFRAGE

8

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ück

Wie 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.

    
LastTribunal 24.04.2013, 15:38
quelle

2 Antworten

12

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.

    
Jen S 24.04.2013, 21:15
quelle
2

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:

  • Linq:

von ev in Veranstaltungen     wo ev.Start & gt; = DateTime.Now.Date     Wähle ev

aus
  • LINQPAD 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.

    
Ruslan Krak 06.12.2013 07:06
quelle

Tags und Links