2009-07-10 18 views
21

Zacząłem używać Linq do SQL dla projektu, nad którym pracuję i napotkałem problem przy zamawianiu przez pole DateTime, ale ponieważ DateTime zezwala na wartości zerowe, wartości zerowe są mniejsze niż rzeczywiste daty tam.Zamawianie zerowalne DateTime w Linq do SQL

Więc bardzo chcę tych z datą na górze (uporządkowaną w obie strony), a następnie wszystkich bez daty.

jobList = from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      select ju.Job; 
return jobList.OrderByDescending(j => j.EndDate); 

Odpowiedz

45

Jest to bit hack, ale wydaje się, aby pracować z LINQ do SQL:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created ?? DateTime.MaxValue descending; 

Więc jestem zastępując maksymalną możliwą wartość DateTime gdy rzeczywista „Utwórz” wartość jest zero. To spowoduje umieszczenie wszystkich wartości pustych na górze.

Innym podejściem jest zamówienie, czy pole daty ma wartość. Działa to też:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created.HasValue descending 
      orderby ju.Created descending; 
+3

jestem nie można umieścić mój palec na dokładnie dlaczego, ale znajdę swoją drugie rozwiązanie bardzo piękne –

+0

Patrząc na pytanie ponownie, to trochę niejednoznaczne, czy pytający chce null wartości najpierw lub nie (mówi, że nie, ale potem nakazuje zejście zapytania). Tak czy inaczej jest to mały krok od jednego z tych fragmentów kodu do tego, czego chce. –

+0

Dzięki temu matowi to dokładnie to, czego szukałem. a co do porządku, to był tylko przykład, muszę zamówić go w inny sposób w różnych miejscach, ale wartości zerowe są zawsze ostatnie. – dkarzon