2がList<DateTime>
あり、2番目のリストにない最初のリストのサブセットを返したいのですが、時間を無視します。
Except拡張メソッドを使用してこれを行うことは可能ですか?
var missingDates = dateList1.Except(dateList2);
両方のリストの時間をに設定する必要がありますか、それともプロパティを00:00:00
使用し.Date
て比較する方法はありますか?
これを試して:
var missingDates = dateList1.Select(x=>x.Date).Except(dateList2.Select(y=>y.Date));
これは時間を完全に無視しますが、結果では時間も失われます...
もう一度考えてみてください:もちろんIEqualityComparer
、結果の時間を保持するカスタムを実装できます。
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();
}
}
そして、その比較子を使用します。
var missingDates = dateList1.Except(dateList2, new DateComparer());
これは比較で時刻を無視しますが、時刻をそのままにして日付を返します。
List<DateTime> missingDates = dateList1.Where(list1Item => !dateList2.Exists(list2Item => list2Item.Date == list1Item.Date)).ToList();