ASP.NET MVC - Model.OrderBy Data não tem efeito
-
07-07-2019 - |
Pergunta
Eu estou tendo algumas dificuldades para classificar os meus resultados por data. Existe algum método especial? Porque eu estou fazendo isso agora:
var db = new DB();
var articles = db.Articles;
var orderedArticles = articles.OrderBy(a => a.Date);
return View(orderedArticles.ToList());
Onde Data é um campo de data e hora. E não há nenhum efeito para OrderBy (..) ou OrderByDescending (..)
Então, eu consegui verificar o que está acontecendo.
Toda vez que eu adicionar um novo artigo eu só estou usando a data em não o tempo assim se eu tiver dois artigos ambos para o mesmo dia, por exemplo: com:
var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList();
Eu teria
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
Assim você pode ver que é a filtragem por data, mas a coisa é quando eu tenho a mesma data a ordenação perde o foco. Então, o que eu fiz é, orderBy dois contextos diferentes, como primeira ordem por ID e de ordem mais tarde por Data:
var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList();
Então, depois disso, eu tenho o seguinte:
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
Eu realmente não sei se este é o caminho certo para fazê-lo porque o principal problema é que quando você enviar um campo de data como 16/09/2009 que define o tempo até 00:00 e este é um problema em esta situação.
Solução
Este código parece ser bom. Você deve verificar o que é realmente no campo Data e certifique-se que você não, por exemplo, definir apenas a data do objeto DateTime no nível de banco de dados, que resultaria em todos DateTime objetos de uma determinada data para o ponto em 00:00:00 assim o LINQ não saberia como para classificá-los.
Outras dicas
Olhando para a resposta que você forneceu (que FYI deve ser movido para a questão de uma edição), você deve aplicar um ThenBy, ao invés de um novo OrderBy:
var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();