3

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

是否可以使用 except 扩展方法来做到这一点?

var missingDates = dateList1.Except(dateList2);

我是否需要将两个列表中的时间设置为,00:00:00或者有什么方法可以使用该.Date属性进行比较?

4

2 回答 2

5

试试这个:

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());
于 2012-10-01T11:11:32.023 回答
1

这将忽略比较中的时间,但返回时间完整的日期:

List<DateTime> missingDates = dateList1.Where(list1Item => !dateList2.Exists(list2Item => list2Item.Date == list1Item.Date)).ToList();
于 2012-10-01T11:20:02.320 回答