2010-01-18 98 views
1

我想这个代码从存储过程中转换成“LINQ实体”查询:实体框架 - 日期时间在where子句中

select * from myTable 
where venue_date + start_time <= @EndDate 
and dateadd(minute, duration * 24 * 60, venue_date + start_time) >= @StartDate 

正如你可以看到有日期的一些操作。这样的事情不会起作用,因为功能,如.AddHours()不支持:

where b.Venue_Date.Value.AddHours(b.Start_Time.Value.Hour) <= request.EndDate 

像这样的事情不会工作。错误说,有关不带参数的构造函数支持:

where new DateTime(b.Venue_Date.Value.Year, b.Venue_Date.Value.Month, 
    b.Venue_Date.Value.Day, b.Start_Time.Value.Hour, b.Start_Time.Value.Minute, 
    b.Start_Time.Value.Second) <= request.EndDate 

看来,Entity Framework和日期打交道时是非常严格的。我想我必须使用一个程序。接下来的问题是弄清楚如何创建一个可以填充多个相关对象集合的过程。

+0

那么......这里真正的问题是什么? – 2010-01-18 05:56:01

+0

嗨雷克斯M - 我只是想知道是否有办法使用LINQ做到这一点,或者我不得不诉诸程序。 – 2010-01-18 05:57:16

回答

0

正在改变架构的一个选项?我的经验是,当存储单独的列,如:

  • 日期
  • 开始时间(如日期)
  • 停止时间(日期)

...分开,这是一个巨大的有利于将日期冗余存储在DateStartTime列中。并非最不重要,因为它使您的查询(1)更易于编写,并且(2)查询现在可以使用索引。

我已经完成了这两种方式,我更喜欢这种方法。

+0

感谢您的答复克雷格。不幸的是,我不能改变可恶的模式:( - 现在通过实体框架扩展使用存储过程... – 2010-01-18 22:55:18