使用LINQ比较DateTime的日期部分

时间:2015-01-16 09:29:51

标签: c# linq date datetime comparison

我想在不同的日期之间过滤一些文档。首先,我尝试直接比较日期,但不必考虑时间(小时,分钟,秒)。因此,只需要日期部分,但以下方法是错误的:

DateTime? fromDate = documentFilter.fromDate;
if (fromDate.HasValue) {
    filterResults = filterResults.Where (d => d.LastModifiedAt.Value.Year >= fromDate.Value.Year
    && d.LastModifiedAt.Value.Month >= fromDate.Value.Month
    && d.LastModifiedAt.Value.Day >= fromDate.Value.Day);
}

DateTime? toDate = documentFilter.toDate;
if (toDate.HasValue) {
    filterResults = filterResults.Where (d => d.LastModifiedAt.Value.Year <= toDate.Value.Year
    && d.LastModifiedAt.Value.Month <= toDate.Value.Month
    && d.LastModifiedAt.Value.Day <= toDate.Value.Day);
}

考虑从日期 8/15/2014 12:00:00 AM到日期 9/15/2014 12:00:00 AM。如果文档的日期为8/16/2014 10:06:25 AM,则不会出现在结果中。原因是我直接比较每个组件(年,月,日)。因为那天是16和16> 15不符合最后一个条件。

我该如何解决这个问题?我应该把时间设置为午夜前一分钟吗?或者我应该计算差异?

2 个答案:

答案 0 :(得分:7)

只需使用DateTime.Date属性:

if (fromDate.HasValue) {
    filterResults = filterResults
        .Where(d => d.LastModifiedAt.Date >= fromDate.Value.Date);
}
if (toDate.HasValue) {
    filterResults = filterResults
        .Where(d => d.LastModifiedAt.Date <= toDate.Value.Date);
}

答案 1 :(得分:5)

DateTimeDate属性,在午夜的同一天返回DateTime

DateTime? fromDate = documentFilter.fromDate;
if (fromDate.HasValue)
    filterResults = filterResults.Where(d => d.LastModifiedAt.Value.Date >= fromDate.Value.Date);

DateTime? toDate = documentFilter.toDate;
if (toDate.HasValue)
    filterResults = filterResults.Where(d => d.LastModifiedAt.Value.Date <= toDate.Value.Date);