c# - Linq to Objects DateTime 除了忽略时间

标签 c# linq

我有一个 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/

相关文章:

c# - 在 C# 中的 linq-sql 连接查询上有多个 Id

c# - NHibernate 和取消对实体的更改

c# - 在 C# 中使用凭据连接到 TFS

c# - 在哪里存储可编辑的配置参数

c# - 基于 app.config 值的不同 app.config appSettings

c# - 子对象属性的 LINQ 'in' 子句

c# - 在 blazor 中绑定(bind)动态值的最佳方法是什么

javascript - 是否有与 Array.prototype.find() 等效的 Javascript 可以在旧版浏览器上运行?

c# - 在评估 IQueryable 之前指定延迟操作

c# - 从哈希集中替换并合并 "Duplicates"