Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Converti stringa in valore datetime in LINQ

Probabilmente vale la pena eseguire l'analisi in locale anziché nel database, tramite 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));

La selezione iniziale serve a garantire che venga recuperata solo la colonna pertinente, anziché l'intera entità (solo per eliminarne la maggior parte). Ho anche evitato di usare un tipo anonimo perché sembra non abbia senso qui.

Nota come ho specificato la cultura invariante tra l'altro:quasi certamente non vuoi usare solo la cultura attuale. E ho cambiato il modello utilizzato per l'analisi, poiché suona come la tua fonte i dati sono in yyyyMMdd formato.

Ovviamente, se possibile, dovresti modificare lo schema del database per memorizzare i valori della data in una colonna basata sulla data, anziché come testo.