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.

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top