2009-09-16 17 views
5

Mam pewne problemy z sortowaniem wyników według dat. Czy istnieje specjalna metoda? Ponieważ robię to teraz:ASP.NET MVC - Model.OrderBy Data nie ma wpływu

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

Jeżeli data jest polem datetime. I nie ma żadnego wpływu na OrderBy (..) lub OrderByDescending (..)

Więc udało mi się sprawdzić, co się dzieje.

Everytime I dodać nowy artykuł Ja tylko na podstawie daty nie raz tak jeśli mam dwa artykuły zarówno w tym samym dniu na przykład: z:

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

musiałbym

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 

Widać więc, że filtruje się według daty, ale chodzi o to, że mam tę samą datę, w której sortowanie traci ostrość. Więc co zrobiłem znaczy orderby dwa różne konteksty, jak pierwszego zamówienia przez ID i późniejszej kolejności wg daty:

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

Więc po tym mam następujące:

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 

ja naprawdę nie wiem jeśli jest to właściwy sposób, ponieważ głównym problemem jest to, że po przesłaniu pola daty, jak 16/09/2009, ustawia czas na 00:00 i jest to problem w tej sytuacji.

+0

Niestety - nie miałem problemy z sortowaniem dat, zakładając, że Data to pole datetime. Może mógłbyś bardziej szczegółowo określić typ/wersję bazy danych? –

+0

spróbuj przenieść OrderBy. Do: return View (articles.ToList(). OrderBy (a => a.Date)); To co robisz wygląda dobrze, ale to zabierze bazę danych z równania i po prostu użyje Linq do sortowania obiektów. Jeśli to działa, sortowanie nie ma miejsca w zapytaniu linq. – anonymous

Odpowiedz

6

Ten kod wygląda dobrze. Powinieneś sprawdzić, co tak naprawdę jest w polu Data i upewnić się, że na przykład nie ustawiłeś tylko obiektu Data obiektu DateTime na poziomie bazy danych, co spowodowałoby, że wszystkie obiekty DateTime o określonej dacie wskazywałyby 00:00:00 w ten sposób LINQ nie wiedziałby, jak je sortować.

+0

Witam Robban, dokładnie tak, jak powiedziałeś, zredagowałem moje pytanie. Ale nie mam pojęcia, czy to jest właściwy sposób, aby to zrobić. Dzięki za pomoc – zanona

6

Patrząc na odpowiedź podałeś (FYI, które powinny zostać przeniesione do kwestii jako Edit), należy zastosować się ThenBy, zamiast nowego OrderBy:

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

To fajne, dzięki za cynk z ThenBy() metodą Dan, o wiele lepiej. – zanona

Powiązane problemy