ASP.NET MVC - Model.OrderBy Дата не имеет никакого эффекта - PullRequest
5 голосов
/ 16 сентября 2009

У меня возникают трудности с сортировкой результатов по дате. Есть ли особый метод? Потому что я делаю это прямо сейчас:

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

Где Date - поле даты и времени. И нет никакого эффекта для OrderBy (..) или OrderByDescending (..)

Так что мне удалось проверить, что происходит.

Каждый раз, когда я добавляю новую статью, я просто использую дату, а не время, поэтому если у меня есть две статьи для одного дня, например: с:

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

Я бы получил

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

Итак, вы можете видеть, что происходит фильтрация по дате, но дело в том, что когда у меня та же дата, сортировка теряет фокус. Итак, я сделал так: упорядочить в двух разных контекстах, таких как первый порядок по идентификатору и более поздний порядок по дате:

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

Итак, после этого у меня есть следующее:

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

Я действительно не знаю, является ли это правильным способом сделать это, потому что основная проблема заключается в том, что когда вы отправляете поле даты, например 16/09/2009, оно устанавливает время в 00:00, и это проблема на эта ситуация.

Ответы [ 2 ]

6 голосов
/ 16 сентября 2009

Глядя на ответ, который вы предоставили (какой FYI следует перенести в вопрос в качестве правки), вы должны применить ThenBy вместо нового OrderBy:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();
6 голосов
/ 16 сентября 2009

Этот код выглядит хорошо. Вы должны проверить, что действительно находится в поле Date, и убедиться, что вы, например, не устанавливаете только Date объекта DateTime на уровне базы данных, что приведет к тому, что все объекты DateTime определенной даты будут указывать на 00:00:00. таким образом, LINQ не знал бы, как их сортировать.

...