使用LINQ比较DateTime的日期部分
Use LINQ to compare the date part of DateTime
我想过滤不同日期之间的一些文档。首先,我尝试直接比较日期,但不必考虑时间(小时、分钟、秒)。因此只需要日期部分,但是下面的做法是错误的:
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 最后一个条件不满足。
我该如何解决这个问题?我应该将时间设置为午夜前一分钟吗?还是我应该计算差值?
只需使用 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);
}
DateTime
有一个 Date
属性 其中 returns 一个 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);
我想过滤不同日期之间的一些文档。首先,我尝试直接比较日期,但不必考虑时间(小时、分钟、秒)。因此只需要日期部分,但是下面的做法是错误的:
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 最后一个条件不满足。
我该如何解决这个问题?我应该将时间设置为午夜前一分钟吗?还是我应该计算差值?
只需使用 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);
}
DateTime
有一个 Date
属性 其中 returns 一个 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);