konvertieren von Zeichenfolgen in DateTime in linq-Abfrage mit where-Klausel?
Ich bin versuchen, um Benutzer-Liste EF. und ich habe ein Feld in der Tabelle zurückkehren, die das Datum als string-Datentyp. Ich bin nun vergleichen Sie diese Rendite heutige Datum dann bin ich immer Fehler.also irgendeiner eine Idee, wie Sie das tun können, konvertieren von Zeichenfolgen in datetime in C#.
Hier ist die Abfrage:
var res = db.users
.Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now)
.ToList(); //but here not getting list
So ist es möglich, in EF-string zu DateTime Konvertierung. Wenn jemand eine Idee hat, lasst es mich bitte wissen.
Was ist der Wert von
DD-MM-YYYY diesem format speichern
sollte es nicht DD-MM-YYYY statt TT-MM-YYY?
"dann bin ich immer Fehler" - welcher Fehler? Und Sie verwenden Sie einen text-Repräsentation in der Datenbank, mit zu beginnen? Wenn Sie könnte sich ändern, die Datenbank zu verwenden, ein sinnvoller Feld Typ, alle code der Umgang mit ihm ist wahrscheinlich besser...
a.returndate
?DD-MM-YYYY diesem format speichern
sollte es nicht DD-MM-YYYY statt TT-MM-YYY?
"dann bin ich immer Fehler" - welcher Fehler? Und Sie verwenden Sie einen text-Repräsentation in der Datenbank, mit zu beginnen? Wenn Sie könnte sich ändern, die Datenbank zu verwenden, ein sinnvoller Feld Typ, alle code der Umgang mit ihm ist wahrscheinlich besser...
InformationsquelleAutor coderwill | 2017-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden
Convert.ToDatetime
Methode inLINQ to Entities
, also zuerst die Daten aus der db dann verwenden Sie die Methode auf der ListeHINWEIS: Wenn Sie ändern, können Sie Ihre
columns data type
zuDateTime
geben, dann können Sie vergleichen Sie inLINQ To Entities
, da Sie sonst tun sollte, wie obenIch bearbeitet meine Antwort, versuchen, diese mit format
Holen Sie die gesamte Tabelle so filtern Sie die Daten innerhalb der Anwendung ist eine schlechte Praxis
yer sind Sie richtig, wenn Sie diese Tabelle enthält sehr große Datenmengen
der beste Weg, um dieses Problem zu beheben ist, um die richtigen Daten-Typ der Spalte in der Datenbank. Der nächste beste Weg wäre, um das Datum als string im ISO-format (yyyy-MM-dd HH:mm:ss), so kann man zumindest vergleichen Sie die text-Darstellung ohne Umwandlung.
InformationsquelleAutor ikram
Wie pro Ihre Kommentare zur Frage, die Sie tun müssen,
In Ihrem Fall
Convert.ToDateTime(string str)
ist nicht die Arbeit als bestandenDateTime
- format unterscheidet sich von Ihren System-format.BTW,
Nie speichern DateTime strings in der Datenbank. Datenbanken haben entsprechende DateTime-Typen, wo Sie Informationen speichern können als DateTime sich. Dass Weise, wenn Sie bringen Werte, die Sie nicht haben, wiederholen Sie den code.
LINQ to Entities nicht erkennt die Methode 'System.DateTime ParseExact(System.String, System.String, System.IFormatProvider) - Methode, und diese Methode kann nicht übersetzt werden, in einen laden zu Ausdruck. ich bin immer dieser Fehler.
Aktualisierte Antwort.
Danke Jungs für bemerkt.
Leider addieren sich die
ToList()
nennen Kräfte, die die auszuführende SQL-Anweisung und dieWhere()
erfolgt im code.InformationsquelleAutor Nikhil Agrawal
Versuchen Sie Dies :
DateTime.ParseExact
nicht übersetzt werden in eine sql-AnweisungInformationsquelleAutor Sudhakar Tillapudi
Mit aktuellen Schemas Sie können nur die Liste aller Objekte und dann filtern.
Linq to Entities-Konstrukte in SQL Abfrage, die ausgeführt wird, wenn die enumeration erfolgt ist.
Nur So erhalten Sie die volle Liste, dann filtern. Oder das Datenbank-schema ändern wird dringend empfohlen.
UPDATE
Aber die komplette Tabelle geladen wird, bevor die filtration. So u brauchen, um Ihre Feld-Typ-datetime. Dann u kann einfache Vergleich innerhalb
Where
.@NikhilAgrawal ebenfalls aktualisiert seine Antwort in einem richtigen Weg. )
ja, diese Welle ist es korrekt, aber in meiner Tabelle viele Daten zu speichern, so dass die Zeit dieser Abfrage ist es arbeiten sehr langsam, so dass eine andere Lösung??
Ich erwähnte bereits - ändern-Feld-Typ-datetime -, das nur nebenbei.
InformationsquelleAutor Ryan