【问题标题】:Entity Framework - DateTime in the where clause实体框架 - where 子句中的日期时间
【发布时间】:2010-01-18 05:46:26
【问题描述】:

我正在尝试将此代码从存储过程转换为“LINQ to Entities”查询:

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

似乎实体框架在处理日期时非常严格。我想我将不得不使用一个程序。下一个问题是弄清楚如何创建一个可以填充多个相关对象集合的过程。

【问题讨论】:

  • 那么......这里的实际问题是什么?
  • 嗨 Rex M - 我只是想知道是否有办法使用 LINQ 来做到这一点,或者我是否必须求助于程序。

标签: c# entity-framework linq-to-entities


【解决方案1】:

是否可以选择更改架构?我的经验是,在存储单独的列时,例如:

  • 日期
  • 开始时间(作为日期)
  • 停止时间(作为日期)

...另外,将日期冗余地存储在DateStartTime 列中是一个巨大 优势。尤其是因为它使您的查询 (1) 更易于编写,并且 (2) 查询现在可以使用索引。

这两种方法我都做过,我更喜欢这种方法。

【讨论】:

  • 感谢克雷格的回复。不幸的是,我无法更改可恨的架构 :( - 现在正在通过实体框架扩展查看使用存储过程...
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2010-10-06
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
相关资源
最近更新 更多