2010-01-18 48 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