3 votes

Linq to Objects DateTime Sauf ignorer l'heure

J'ai un 2 List<DateTime> et je veux retourner le sous-ensemble de la première liste qui n'est pas dans la deuxième liste, mais sans tenir compte de l'heure.

Est-il possible de le faire en utilisant la méthode de l'extension Excepté ?

var missingDates = dateList1.Except(dateList2);

Est-ce que je dois régler l'heure dans les deux listes sur 00:00:00 ou y a-t-il un moyen d'utiliser le .Date propriété à comparer ?

5voto

Spontifixus Points 5272

Essayez ça :

var missingDates = dateList1.Select(x=>x.Date).Except(dateList2.Select(y=>y.Date));

Bien que cela ignore complètement l'heure, ce qui signifie que dans votre résultat, l'heure manquera aussi...

En y réfléchissant bien : Vous pourriez bien sûr implémenter un IEqualityComparer pour préserver le temps dans le résultat :

public class DateComparer : IEqualityComparer<DateTime>
{
    public bool Equals(DateTime left, DateTime right)
    {
        return left.Date.Equals(right.Date);
    }

    public int GetHashCode(DateTime dateTime)
    {
        return dateTime.Date.GetHashCode();
    }
}

Et ensuite utiliser ce comparateur :

var missingDates = dateList1.Except(dateList2, new DateComparer());

1voto

Carl Points 924

Cette méthode ignore l'heure dans la comparaison mais renvoie les dates avec les heures intactes :

List<DateTime> missingDates = dateList1.Where(list1Item => !dateList2.Exists(list2Item => list2Item.Date == list1Item.Date)).ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X