LINQ中的日期时间比较

时间:2010-02-05 19:04:06

标签: linq datetime

我遇到了以下问题。

看一下以下where子句。

Where(x => x.CreateTS <= dateParameters.CreationDate.ToDateValue &&
           x.CreateTS >= dateParameters.CreationDate.FromDateValue)

CreateTS是表中的Timestamp列。所以当我的日期参数是todate = 01/28/2010 12:00 A.M“fromdate =”01/26/2010 12.00AM“(c#DateTime类型)我的查询不会重新检查其CreateTS看起来像01/28/2010的表记录1:45 A.M及以上只是在时间戳上有差异。

我只想做比较,不想比较时间戳。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

只需查看DateTime的.Date部分:

Where(x => x.CreateTS.Date <= dateParameters.CreationDate.ToDateValue && x.CreateTS.Date >= dateParameters.CreationDate.FromDateValue)

作为旁注:

就我个人而言,我会从最初开始,因为从可读性的角度来看,它更容易理解:

Where(x => x.CreateTS.Date >= dateParameters.CreationDate.FromDateValue && x.CreateTS.Date <= dateParameters.CreationDate.ToDateValue)

(我发现更容易将两个值之间视为&gt;低和

<小时/>

编辑:您没有指定您使用的是EF LINQ提供程序,它们不允许您执行日期。我相信,你可以通过期待有一天来处理这个问题,然后使用&lt;而不是&lt; =用于你的“比较”:

Where(x => x.CreateTS >= dateParameters.CreationDate.FromDateValue && x.CreateTS.Date < dateParameters.CreationDate.AddDays(1).ToDateValue)

答案 1 :(得分:1)

@SARAVAN,AFAIK时间戳列不能用于比较。时间戳列在EF中映射为byte [](字节数组)。如果需要这样的比较,我建议将数据库中的timestamp列更改为datetime。

仅引用MSDN

  

SQL Server时间戳数据类型与时间或日期无关。 SQL Server时间戳是二进制数,表示数据修改发生在数据库中的相对顺序。

答案 2 :(得分:0)

这里有趣的时刻就是这样 01/28/2010 12:00 A.M实际上24小时格式是00:00而01/28/2010 1:45 A.M是01:45这似乎是为什么不返回这些记录的原因。中午将于01/28/2010 12:00 P.M