LinqToSql与日期问题

时间:2010-01-06 17:45:51

标签: .net linq linq-to-sql datetime

我有一个简单的LinqToSql查询

from p in GL_PROJECTs
where p.CREATE_DT == new DateTime(2009,10,26)
select new p

数据库中的某些记录创建的日期时间部分不是00:00:00,因此不会被此查询检索。我想要实现的是一整天的时间不敏感检索。

我尝试了以下内容,添加日期,试图比较像:

from p in GL_PROJECTs
where p.CREATE_DT.Date >= new DateTime(2009,10,26)
select new p

但是在LinqPad中我收到以下错误:

  

'System.Nullable'   不包含的定义   '日期',没有延期方法'日期'   接受第一个类型的参数   'System.Nullable'   可以找到(按F4添加一个   使用指令或汇编参考)

为什么这不起作用以及我能做些什么才能让它发挥作用的任何想法?

由于

3 个答案:

答案 0 :(得分:2)

只需检查范围

from p in GL_PROJECTs 
where p.CREATE_DT >= new DateTime(2009,10,26) && 
      p.CREATE_DT < new DateTime(2009,10,27) 
select new p

答案 1 :(得分:0)

如果它可以为空,则需要先使用Value属性,然后在其上调用Date

p.CREATE_DT.Value.Date

也就是说,使用Date属性将返回时间戳为午夜的日期,因此它仍然会有与之关联的时间。这对你所描述的内容没有帮助。您可以使用@AlbertEin's建议并检查范围。

答案 2 :(得分:0)

如果允许CREATE_DT在数据库中具有NULL值,则它将映射到.​​net中的Date?类型(即通用类型Nullable<Data>)。

您可以通过Value属性检索Nullable类型的实际日期。

尝试

from p in GL_PROJECTs
where p.CREATE_DT.Value.Date == new DateTime(2009,10,26)
select new p

但是如果CREATE_DT确实为null,则会抛出异常。要避免此异常,您必须确保Nullable类型确实包含值:

from p in GL_PROJECTs
where p.CREATE_DT.HasValue && p.CREATE_DT.Value.Date == new DateTime(2009,10,26)
select new p