Comment puis-je obtenir la dernière date d'une collection d'objets utilisant LINQ?
J'ai une liste d'objets et chaque objet a une ExpirationDate de la propriété, qui est de type DateTime. Je veux récupérer la dernière date dans la liste. Est-il un moyen élégant de faire que grâce à LINQ?
Quelque chose comme:
DateTime latestDate = myCollection.Where(r=>r.ExpirationDate.HasValue).MaxDate(r=>r.ExpirationDate.Value);
source d'informationauteur leora
Vous devez vous connecter pour publier un commentaire.
Intellisense devrait vous donner le Max() la méthode. =)
Maintenant, si vous devez l'affecter à un DateTime, je voudrais envisager de le faire ainsi:
Ce ne sera pas le cas d'un regroupement vide ou une collection avec seulement null ExpirationDates.
Selon votre logique, la vérification de
pourrait être une bonne idée avant d'essayer d'attribuer une valeur.
Vous y êtes presque. Utilisation Max:
Si toutes les dates d'expiration sont null ou la collection est vide, vous obtiendrez la valeur Null comme un résultat, sinon la plus grande date.
Que vous avez commenté sur J. Reflets de réponse que vous voulez un DateTime, par conséquent, vous aurez besoin de faire quelque chose à propos de tout regroupement vide ou pas d'éléments avec une valeur, vous pouvez le faire avec
Cela vous donnera
DateTime.MinValue
au lieu de la valeur null dans mon exemple précédent (il a également l'avantage de l'utilisation de laany
clause qu'il parcourt la collection une fois). J'ai prisMinValue
comme un exemple. Vous pouvez utiliser vos propres abitary date.À l'aide de l'DateTime? est mieux, car il vous permet d'utiliser la valeur null pour ce qu'il signifie défini comme
MinValue
pourrait être un élément à votre liste.Juste assurez-vous qu'il est un NullReference vérifier avant d'assigner
.ExpriationDate
:Bob Vale avait la bonne idée avec
Trier la liste par date décroissante et prendre la première (la projection si nécessaire).
Comme je l'ai écrit cela, j'étais sous l'impression que le
Max()
méthode ne fonctionne que sur les types numériques (c'est à dire, int, short, virgule, etc.). Il semble fonctionner avecDateTime
objets trop. Donc, cela pourrait fonctionner ainsi: