Attualmente sto cercando di aggiungere un ordine a una query LINQ che ordinerà da un campo datetime in un oggetto EF:Ordina per (crescente | decrescente) in LINQ to SQL Server gestisce DateTime in modo diverso
return this.SortingDirection.Equals("asc", StringComparison.InvariantCultureIgnoreCase) ? entities.OrderBy(e => e.ProcessStartTime) : entities.OrderByDescending(e => e.ProcessStartTime);
Quando SortingDirection
è impostato su desc
, funziona correttamente. Ma quando impostato su asc
non ottengo record!
Osservando SQL Server Profiler, risulta che gli oggetti DateTime
sono stati formattati in modo diverso!
Per DESC
:
ORDER BY [Project1].[StartTime] DESC',N'[email protected]__linq__22='2015-01-07 09:00:23',@p__linq__23='2015-01-07 09:00:23',@p__linq__24='2015-01-07 09:05:30',@p__linq__25='2015-01-07 09:05:30'
e per ASC
:
ORDER BY [Project1].[StartTime] ASC',N'[email protected]__linq__22='2015-07-01 09:00:23',@p__linq__23='2015-07-01 09:00:23',@p__linq__24='2015-07-01 09:05:30',@p__linq__25='2015-07-01 09:05:30'
giorni e mesi sono stati scambiati, causando la query SQL per restituire alcun risultato.
Questo per me suggerisce che il metodo IQueryable.OrderBy()
non sta utilizzando il formato locale corretto/formato diverso per OrderByDescending()
, potrebbe essere un bug in EF?
C'è qualcosa nella stringa di connessione che potrei aggiungere per far rispettare questo o un altro modo che potrei ordinare in base a queste date?
La mia configurazione:
- .NET 4.5
- Entity Framework 5.0.0
- SQL Server 2012 standard
Molte grazie
Come mai un valore * specifico * datetime, ad es. '2015-01-07', è coinvolto in un ordine di clausola? –
possibile duplicato di [associazione MVC DateTime con formato data errato] (http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format) – user2831628