2009-09-16 17 views
5

Tengo algunas dificultades para ordenar mis resultados por fecha. ¿Hay algún método especial? porque estoy haciendo esto ahora:ASP.NET MVC - Model.OrderBy La fecha no tiene efecto

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

donde Date es un campo de fecha y hora. Y no hay ningún efecto de OrdenarPor (..) o OrderByDescending (..)

Así que lograron comprobar lo que está sucediendo.

Cada vez que añada un nuevo artículo Sólo estoy usando la fecha en el tiempo no tan si tengo dos artículos tanto para el mismo día, por ejemplo: con:

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

me habría

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 

Entonces puede ver que está filtrando por fecha, pero es que cuando tengo la misma fecha, la clasificación pierde el foco. Así que lo que hice es decir, orderBy dos contextos diferentes, como primer orden por Id y el orden más tarde por Fecha:

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

Así que después de esto tengo los siguientes:

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 

Realmente no sé si esta es la manera correcta de hacerlo, porque el problema principal es que cuando envía un campo de fecha como 16/09/2009 establece el horario a 00:00 y este es un problema en esta situación.

+0

Lo sentimos - no he tenido problemas con las fechas de clasificación, suponiendo que Fecha es un campo de fecha y hora. Tal vez podría ser más específico en cuanto a su tipo de base de datos/versión? –

+0

intente mover el OrderBy. Do: return View (articles.ToList(). OrderBy (a => a.Date)); Lo que está haciendo se ve bien, pero esto sacará la base de datos de la ecuación y simplemente usará la ordenación Linq to Objects. Si esto funciona, el tipo no está sucediendo en la consulta de linq. – anonymous

Respuesta

6

Este código se ve bien. Debería verificar lo que realmente está en el campo Fecha y asegurarse de que no, por ejemplo, solo establece la Fecha del objeto DateTime en el nivel de la base de datos, lo que daría como resultado que todos los objetos DateTime de una fecha determinada apuntaran a 00:00:00 por lo tanto, el LINQ no sabría cómo clasificarlos.

+0

Hola Robban es exactamente lo que dijiste, he editado mi pregunta. Pero al final, no sé si esta es la forma correcta de hacerlo. Gracias por su ayuda – zanona

6

En cuanto a la respuesta que ya ha proporcionado (que su información se debe mover en la cuestión como una edición), se debe aplicar una ThenBy, en lugar de un nuevo OrdenarPor:

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

Eso es genial, gracias por la sugerencia con el método Dan de ThenBy(), mucho mejor así. – zanona

Cuestiones relacionadas