我有一个 2 List<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());
关于c# - Linq to Objects DateTime 除了忽略时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672098/