2009-07-10 5 views
21

J'ai commencé à utiliser Linq to SQL pour un projet im travaillant dessus et j'ai rencontré un problème lors de la commande par un champ DateTime, mais comme le DateTime autorise les Nulls, les Nuls sont moins élevés que les dates réelles là-bas.Commande de DateTime nullable dans Linq to SQL

Donc, je veux à peu près ceux avec une date d'être au sommet (ordonnée de toute façon), puis tous ceux sans date définie.

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

Répondre

45

C'est un peu un hack, mais il semble travailler avec LINQ to SQL:

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

donc je remplace la valeur DateTime maximale possible lorsque la valeur réelle « Créer » est nul. Cela mettra toutes les valeurs nulles en haut.

Une autre approche consiste à déterminer si le champ de date a une valeur. Cela fonctionne aussi:

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

Je suis ne peut pas mettre mon doigt sur exactement pourquoi, mais je trouve votre deuxième solution tout à fait belle –

+0

En regardant à nouveau la question, il est un peu ambigu quant à savoir si le demandeur veut l'hypothèse nulle les valeurs en premier ou pas (il dit qu'il ne le fait pas, mais ordonne alors la requête en descendant). Quoi qu'il en soit, c'est un petit pas de l'un ou l'autre de ces extraits de code à ce qu'il veut. –

+0

Merci matt c'est exactement ce que je cherchais. et quant à la commande c'était juste un exemple, je dois le commander d'autres manières dans différents endroits mais les valeurs nulles sont toujours les dernières. – dkarzon