Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren Sie die Zeichenfolge in den Datetime-Wert in LINQ

Es lohnt sich wahrscheinlich, das Parsing nur lokal statt in der Datenbank über AsEnumerable durchzuführen :

var query = db.tb1.Select(tb => tb.dt)
                  .AsEnumerable() // Do the rest of the processing locally
                  .Select(x => DateTime.ParseExact(x, "yyyyMMdd",
                                                CultureInfo.InvariantCulture));

Die anfängliche Auswahl soll sicherstellen, dass nur die relevante Spalte abgerufen wird und nicht die gesamte Entität (nur das meiste davon wird verworfen). Ich habe auch vermieden, einen anonymen Typ zu verwenden, da es hier keinen Sinn zu machen scheint.

Beachten Sie, wie ich übrigens die invariante Kultur angegeben habe - Sie tun es mit ziemlicher Sicherheit nicht wollen nur die aktuelle Kultur verwenden. Und ich habe das zum Parsen verwendete Muster geändert, da es wie Ihre Quelle klingt Daten sind in yyyyMMdd formatieren.

Natürlich sollten Sie nach Möglichkeit das Datenbankschema so ändern, dass Datumswerte in einer datumsbasierten Spalte und nicht als Text gespeichert werden.