我希望能够在DateTime字段上搜索日期范围,还能搜索时间范围.例如,“让我在5月份创建所有记录,创建时间为下午1点到3点”.我想要生成的SQL是:
WHERE CreatedOn BETWEEN '05/01/2010' AND '06/01/2010' AND CONVERT(time(4), CreatedOn) BETWEEN '01:00 PM' AND '03:00 PM'
我似乎无法弄清楚如何获得一个lambda表达式来让我在那里.有人有任何线索吗?我的项目中有System.Linq.Dynamic.类似于将字符串作为OrderBy子句传递的方式,我想我可以使用Where方法执行相同的操作,如下所示::
results = results.Where("CONVERT(time(4), OccurredOn) BETWEEN '{0}' AND '{1}'", Criteria.OffenseTimeStart, Criteria.OffenseTimeEnd);
但是这会在System.Linq.Dynamic中引发异常.有人有指点吗?
谢谢您的帮助!这是我的工作代码摘录.我将时间条件属性暴露为TimeSpans:
if (Criteria.OffenseDateStart.HasValue)
results = results.Where(o => o.OccurredOn >= Criteria.OffenseDateStart);
if (Criteria.OffenseDateEnd.HasValue)
results = results.Where(o => o.OccurredOn <= Criteria.OffenseDateEnd);
if (Criteria.OffenseTimeStart.HasValue)
results = results.Where(o => o.OccurredOn.TimeOfDay >= Criteria.OffenseTimeStart);
if (Criteria.OffenseTimeEnd.HasValue)
results = results.Where(o => o.OccurredOn.TimeOfDay <= Criteria.OffenseTimeEnd);
最佳答案 我不认为你可以做’Between’,但你可以写一个linq查询,如:
where (x.CreatedOn.Date >= myDate.Date && x.CreatedOn.Date <= myDate2.Date)
&& (x.CreatedOn.TimeOfDay >= TimeSpan.Parse("13:00") && x.CreatedOn.TimeOfDay <= TimeSpan.Parse("15:00"))