2009-09-16 1 views
5

Ho qualche difficoltà a ordinare i risultati per Data. C'è qualche metodo speciale? perché sto facendo questo adesso:ASP.NET MVC - Model.OrderBy La data non ha effetto

var db = new DB(); 
var articles = db.Articles; 
var orderedArticles = articles.OrderBy(a => a.Date); 
return View(orderedArticles.ToList()); 

Dove Date è un campo datetime. E non v'è alcun effetto per OrderBy (..) o OrderByDescending (..)

così sono riuscito a controllare cosa sta succedendo.

Ogni volta che aggiungere un nuovo articolo che sto usando solo la data in non il tempo in modo se ho due articoli sia per lo stesso giorno, per esempio: con:

var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList(); 

mi avrebbe

Id   Title       Date 
10   First Added Article   16/09/2009 00:00 
11   Second Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

Quindi è possibile vedere che si sta filtrando per data, ma il fatto è che quando ho la stessa data l'ordinamento perde lo stato attivo. Quindi quello che ho fatto è, orderBy due contesti diversi, come primo ordine da Id e l'ordine in seguito per data:

var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList(); 

Così, dopo questo ho il seguente:

Id   Title       Date 
11   Second Added Article   16/09/2009 00:00 
10   First Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

io davvero non lo so se questo è il modo giusto per farlo perché il problema principale è che quando si invia un campo data come 16/09/2009 imposta l'ora alle 00:00 e questo è un problema in questa situazione.

+0

Spiacente - non ho avuto problemi con le date di ordinamento, assumendo che Date è un campo datetime. Forse potresti essere più specifico riguardo al tipo/versione del tuo database? –

+0

prova a spostare l'OrderBy. Do: return View (articles.ToList(). OrderBy (a => a.Date)); Quello che stai facendo sembra giusto, ma questo eliminerà il database dall'equazione e userà semplicemente l'ordinamento di Linq to Objects. Se funziona, l'ordinamento non sta accadendo nella query linq. – anonymous

risposta

6

Questo codice sembra buono. Dovresti controllare cosa c'è realmente nel campo Data e assicurarti di non impostare, ad esempio, solo la Data dell'oggetto DateTime a livello di database, il che comporterebbe che tutti gli oggetti DateTime di una certa data puntino a 00:00:00 quindi il LINQ non saprebbe come ordinarli.

+0

Ciao Robban è esattamente quello che hai detto, ho modificato la mia domanda. Ma sill, non so se questo è il modo giusto per farlo. Grazie per il tuo aiuto – zanona

6

Guardando la risposta che hai fornito (che FYI dovrebbe essere spostato la questione come una modifica), si dovrebbe applicare un ThenBy, piuttosto che una nuova OrderBy:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList(); 
+0

È fantastico, grazie per il suggerimento con il metodo ThenBy() Dan, molto meglio così. – zanona