我有一个 2List<DateTime>
并且想要返回不在第二个列表中但忽略时间的第一个列表的子集。
是否可以使用 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();