2012-10-23 58 views
2

我們有這樣的情況:我們有一個帶有Date列和單獨的Time列的SQL Server 2005表。當我試圖查詢這個表,我想這樣做下面的SQL相當於:實體框架和日期+時間算術

where Date + Time > @Something

一些背景信息 - 日期存儲爲一個00:00的時間部分的日期,並且時間存儲爲具有1900-01-01日期組件的時間 - 這意味着在SQL中將這兩者結合在一起可以爲您提供完整的日期時間。

我知道上面有索引含義,但這不是問題所在。

你如何在LINQ中對實體做這件事?

一些其他的事情需要注意:

  • 更改數據庫的架構是不可能的。
  • 這是SQL 2005所以沒有Time數據類型,也沒有從EF返回的TimeSpan(我曾嘗試更改EF模型以嘗試將其投射到TimeSpan,但沒有骰子)
  • 我想嘗試並堅持純Linq-to-Entities並不會停止執行E-SQL /存儲過程/ ExecuteQuery路由。

回答

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; 
+0

在LINQ到實體,你不能做這樣的事情DateTime.Parse或加入紅棗和日期一起。雖然可能的話,使用這樣的單獨調用並不是我正在尋找的;我想單個linq實體查詢返回數據。 –

+0

是隻有一個查詢。您只需準備好您需要的數據。如果這不是你想要的,我想知道爲什麼這對你來說是一個問題。 – LueTm

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) 
+0

不幸的是,date.Year等屬性不支持LINQ to entities query,也不支持.Date(在第二個片段中)。 –

+0

@DavidHusselmann - 這是EntityFunctions的目的,它允許你使用它們。 –