Linq to Objects DateTime除了忽略时间

wog*_*les 3 c# linq

我有一个2 List<DateTime>,想要返回不在第二个列表中但忽略时间的第一个列表的子集。

是否可以使用Except扩展方法执行此操作?

var missingDates = dateList1.Except(dateList2);
Run Code Online (Sandbox Code Playgroud)

我需要将两个列表中的时间都设置为00:00:00还是可以使用该.Date属性进行比较?

Spo*_*xus 5

尝试这个:

var missingDates = dateList1.Select(x=>x.Date).Except(dateList2.Select(y=>y.Date));
Run Code Online (Sandbox Code Playgroud)

尽管这完全忽略了时间,这意味着结果也将丢失时间...

再三考虑:您当然可以实现一个自定义,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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用该比较器:

var missingDates = dateList1.Except(dateList2, new DateComparer());
Run Code Online (Sandbox Code Playgroud)