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

在SQL 2008中,使用Linq to SQL仅搜索日期的时间部分,sql,linq-to-sql,sql-server-2008,lambda,Sql,Linq To Sql,Sql Server 2008,Lambda,我希望能够在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.Lin

我希望能够在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中引发了一个异常。有人有什么建议吗

谢谢你的帮助!这是我的工作代码摘录。我将我的时间标准属性公开为时间跨度:

            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);
if(Criteria.OffenseDateStart.HasValue)
结果=结果。其中(o=>o.OccurredOn>=Criteria.OffenseDateStart);
if(Criteria.OffenseDateEnd.HasValue)
结果=结果。其中(o=>o.OccurredOn o.OccurredOn.TimeOfDay>=Criteria.OffenseTimeStart);
if(Criteria.OffenseTimeEnd.HasValue)

results=results.Where(o=>o.OccurredOn.TimeOfDay我认为您不能执行“介于之间”的操作,但您可以编写一个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"))
where(x.CreatedOn.Date>=myDate.Date&&x.CreatedOn.Date=TimeSpan.Parse(“13:00”)&&x.CreatedOn.TimeOfDay类似的内容

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);
results=results.Where(x=>x.OccurredOn.Date>=Criteria.OffenseDateStart.Date
&&x.OccurredOn.Date=Criteria.offenseTimeststart.TimeOfDay

&&x.OccurredOn.TimeOfDay生成的SQL有点冗长,但工作起来很有魅力!我不认为有TimeSpan SQL翻译…但我想我错了。谢谢!我认为NHibernate 3.0生成的内容更好,但至少可以工作:)很高兴提供帮助。