我希望能够在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);
答案 0 :(得分:2)
我认为你不能做'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"))
答案 1 :(得分:0)
这样的东西?
results = results.Where(x => x.OccurredOn.Date >= Criteria.OffenseDateStart.Date
&& x.OccurredOn.Date <= Criteria.OffenseDateEnd.Date
&& x.OccurredOn.TimeOfDay >= Criteria.OffenseTimeStart.TimeOfDay
&& x.OccurredOn.TimeOfDay <= Criteria.OffenseTimeEnd.TimeOfDay);
(假设OccurredOn
,OffenseDateStart
,OffenseDateEnd
,OffenseTimeStart
和OffenseTimeEnd
都输入DateTime
。)