J'ai une liste lorsque ne pas dupliquer: j'ai un objet à l'intérieur Comment puis-je résoudre ce problème numéro? p> p> code> avec quelques enregistrements,
list code> a un autre objet
code> à l'intérieur. Basé sur l'objet intérieur, j'utilise
eckbyDescendant code>. L'objet intérieur est
null code> dans quelques endroits de sorte qu'il lance
nullreferenceException code>.
obj_announcement code> est
> null code> la requête jette une exception. p>
OrderByDescendant code> non unique. p>
3 Réponses :
items.OrderByDescending(i=> i.Obj_Announcement?.CreatedDate ?? DateTime.MinValue).ToList() should work, as if the value is null, it will return DateTime.MinValue (meaning null values will be at the back), and otherwise, you will just retrieve the CreatedDate.Please note that I am not in front of a pc right now though, so could not test.
Vous avez essentiellement deux options en fonction de l'ensemble résultant que vous attendez.
exclure les instances, ce qui est décider explicitement sur la façon de gérer les nulls. p> li>
ol> Lorsque vous regardez la documentation de obj_announcement code> - la propriété est null. Mais je n'ai pas la portée de la question et changerait le Beavior du programme. P> Li>
OrderByDescendant code> ( https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumérable.orderbydescendants ) On se passe sur le Keyselector code> paramètre. Puisqu'il s'agit d'un
Func
Tsource code> peut montrer - par exemple NULLS sur un objet enfant, dans votre cas.
Donc, IMHO La solution la plus simple sur la manière de traiter ce qui pourrait décider si vous souhaitez préparer ou ajouter les nulls à la liste par P>
items.OrderByDescending(i=> i.Obj_Announcement?.CreatedDate ?? DateTime.MaxValue).ToList()
La méthode NEAT serait de séparer votre requête LINQ de la manière dont vous définissez le fonctionnement de l'élément avant un autre élément. Dans un autre mot: quel est l'ordre de tri de l'élément x et l'élément y
pour cela, nous devons créer une classe qui implémente Supposons que vous avez deux articles icomparer code> p>
code>, l'un d'eux a un anoncement NULL
code>. p>
var result = items.OrderByDescending(item => item, ItemComparer.ByCreatedDate);
+1, c'est une bonne réponse! Mais je pense qu'il n'y a pas de surcharge pour OrderbyDescendant (iEnumerable
items.orderbydescendances (élément => élément, élémentcomparer.bycreateddate); code> et il convient de noter qu'il n'est probablement pas traduisable lorsqu'il n'est probablement pas traduisable lorsqu'il n'est probablement pas traduisable lorsqu'il n'est probablement pas traduisant lorsqu'il est utilisé avec
IQueryable
Dupliqué possible de Linq Commande de Null Colonne où l'ordre est ascendant et NULLS devrait être Dernier
Pour résoudre ce problème, vous devez d'abord décider de la manière dont les valeurs code> null code> doivent être triées. Devraient-ils être les plus bas ou les plus élevés?
@ Renévogt - J'ai besoin de derniers enregistrements en haut, de cette façon dont j'ai besoin.
La bibliothèque nette n'autorise pas une null pour un objet DateTime. Habituellement, j'utilise une nouvelle dateTime qui définit la date par défaut à 1/1/1. Ensuite, je testez pour NULL en vérifiant si la date est supérieure à 1/1/1.
Vous devez commander HASVALUE d'un objet intérieur puis la liste de commandes par sa valeur:
éléments.orderbydescendants (i => i.obj_announcaire.createddate.hasvalue) .Chendedescendants (i => i.obj_announcaire.createddate.value) Code>