使用Linq to SQL仅搜索SQL 2008中日期的时间部分

我希望能够在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"))
点赞