实体框架和日期+时间算术

时间:2012-10-23 21:03:47

标签: entity-framework sql-server-2005 entity-framework-5

我们遇到的情况是,我们有一个SQL Server 2005表,其中包含Date列和单独的Time列。当我尝试查询此表时,我想执行以下SQL的等效操作:

where Date + Time > @Something

一些背景信息 - 日期存储为具有00:00时间组件的日期,时间存储为具有1900-01-01日期组件的时间 - 这意味着在SQL中添加两个一起为你提供一个完整的DateTime。

我知道上面有索引含义,但这不是问题所在。

你如何在linq中实现这一点?

其他一些注意事项:

  • 无法更改数据库架构。
  • 这是SQL 2005所以没有Time数据类型,也没有从EF返回TimeSpan(我尝试更改EF模型以尝试将其转换为TimeSpan,但没有骰子)
  • 我想尝试坚持纯粹的Linq-to-Entities,而不是沿着E-SQL /存储过程/ ExecuteQuery路由。

2 个答案:

答案 0 :(得分:0)

非常蹩脚的想法,但是:

var date = DateTime.Parse("2012-10-23");
var time = DateTime.Parse("1900-01-01 09:00:00);
var something = date + time;

[...] where Date + Time > something;

答案 1 :(得分:0)

实体框架(版本> 4)具有EntityFunctions类。所以你可以这样做:

... where EntityFunctions.CreateDateTime(date.Year, date.Month, date.Day, 
             time.Hour, time.Minute, time.Second) < DateTime.Now

或者你可以用老式的方式来做:

... where date.Date < DateTime.Now.Date || (date.Date == DateTime.Now.Date && time.Time < DateTime.Now)