2017-02-08 2 views
0

Die Klausel Where(i => i.TimeSt >= date1 && i.TimeSt =< date2) wird nicht in where TimeSt between @date1 and @date2 übersetzt. Wie kann ich EF mitteilen, es zu benutzen?EF generiert keine Klausel

Edit1
Dies ist eine vereinfachte Version der Abfrage. Das Original handhabt über 17 Daten.

EDIT2
date1 und date2 sind Standards .NET Datetime-Objekte, die wichtigen Datum Teil und Zeitteil (zB: 2017.01.05 21: 15: 21,123)

+1

Warum sagst du das? Haben Sie eine generierte SQL-Anweisung gesehen? Oder Ihre Anfrage funktioniert nicht? –

+1

Warum willst du das? 'BETWEEN' ist nicht besser als'> ... <', eigentlich ist es anders. Ihre Abfrage schließt diese Zeiten aus, aber BETWEEN enthält sie. –

+1

Was erzeugt es? – peval27

Antwort

1

Die einfache Antwort, dass Sie ist Kann es nicht aus der Box tun. Es besteht eine gewisse Magie in EF7, die es Ihnen erlaubt, die Hand taylor diesen Teil der Abfrage (aber wie andere haben darauf hingewiesen, dies übertrieben scheint), prüfen Sie ihre Tests für ein Beispiel

from o in context.Set<Order>().FromSql(@"SELECT * FROM ""Orders"" WHERE ""OrderDate"" BETWEEN {0} AND {1}", startDate, endDate) 
where c.CustomerID == o.CustomerID 
.... 

https://github.com/aspnet/EntityFramework/blob/1fa247b038927a7d7438f666dc11253f64e0432d/src/Microsoft.EntityFrameworkCore.Relational.Specification.Tests/AsyncFromSqlQueryTestBase.cs#L98

Vielleicht eine bessere Lösung wäre, zwischen der Erweiterungsmethode zu schreiben, die die Reihenfolge der Argumente automatisch umschaltet, oder einfach vor der Abfrage

oder wenn sie automatisch ausgetauscht werden soll, legen Sie beide Ordnungen in die Abfrage (i => (i.TimeSt >= date1 && i.TimeSt =< date2) || (i.TimeSt >= date2 && i.TimeSt =< date1))

Verwandte Themen