Question

J'ai quelques difficultés à trier mes résultats par date. Y a-t-il une méthode spéciale? Parce que je fais ça maintenant:

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

Où Date est un champ de date / heure. Et il n'y a pas d'effet pour OrderBy (..) ou OrderByDescending (..)

J'ai donc réussi à vérifier ce qui se passait.

Chaque fois que j'ajoute un nouvel article, j'utilise simplement la date et non l'heure si j'ai deux articles pour le même jour par exemple: avec:

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

j'aurais

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

Vous pouvez donc voir que le filtrage est effectué par date, mais le fait est que lorsque j'ai la même date, le tri perd le focus. Donc, ce que j’ai fait est, orderBy deux contextes différents, comme first order by Id et plus tard order by Date:

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

Après cela, j’ai le texte suivant:

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

Je ne sais vraiment pas si c'est la bonne façon de procéder car le principal problème est que lorsque vous soumettez un champ de date tel que 16/09/2009, il définit l'heure à 00:00 et il s'agit d'un problème cette situation.

Était-ce utile?

La solution

Ce code semble bon. Vous devez vérifier ce qui se trouve réellement dans le champ Date et vous assurer, par exemple, de ne pas définir uniquement l'objet Date de la date et l'heure au niveau de la base de données. Dans ce cas, tous les objets date et heure d'une certaine date pointeront vers 00:00:00. ainsi, le LINQ ne saurait pas comment les trier.

Autres conseils

En regardant la réponse que vous avez fournie (quel FYI devrait être déplacé dans la question en tant que modification), vous devriez appliquer un ThenBy, plutôt qu'un nouveau OrderBy:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top