sql >> Database >  >> RDS >> Sqlserver

Converteer string naar datetime-waarde in LINQ

Het is waarschijnlijk de moeite waard om de parsing lokaal uit te voeren in plaats van in de database, via AsEnumerable :

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

De eerste selectie is om ervoor te zorgen dat alleen de relevante kolom wordt opgehaald, in plaats van de hele entiteit (alleen voor het grootste deel om te worden weggegooid). Ik heb ook vermeden om een ​​anoniem type te gebruiken, omdat het hier geen zin lijkt te hebben.

Merk op hoe ik trouwens de invariante cultuur heb gespecificeerd - jij vrijwel zeker niet gewoon de huidige cultuur willen gebruiken. En ik heb het patroon dat wordt gebruikt voor het ontleden veranderd, omdat het klinkt als je bron gegevens staan ​​in yyyyMMdd formaat.

Natuurlijk moet u, indien mogelijk, het databaseschema wijzigen om datumwaarden op te slaan in een op datum gebaseerde kolom, in plaats van als tekst.



  1. MySqlConversionException bij toegang tot het DateTime-veld vanuit DataReader

  2. Kan deze SQL-query worden vereenvoudigd?

  3. Fix "INSERT heeft meer expressies dan doelkolommen" in PostgreSQL

  4. Hoe een afbeelding van PostgreSql in te voegen en op te halen met C#