2012-05-18 116 views
1

我需要根據日期範圍等來獲取數據的唯一DATE部分:LINQ到SQL搜索日期

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012' AND 
myDate <= 'May 17 2012' 

我已經寫在LINQ此查詢,問題是,LINQ是將本查詢到:

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012 12:00:00:000AM' AND 
myDate <= 'May 17 2012 12:00:00:000AM' 

問題是,LINQ也在考慮時間部分,但我只需要在日期部分搜索。

任何人都可以幫助我嗎?

謝謝。

回答

8

只是想與你分享我發現的解決方案!

EntityFunctions爲我們提供了TruncateTime(),它可以用於此目的。

EntityFunctions.TruncateTime

from e in MyContext.MyTable.Where(a => 
EntityFunctions.TruncateTime(a.DateTimeColumn) == 
EntityFunctions.TruncateTime(DateTime.Now)) select e; 

編輯: 對於的EntityFramework 6及以上:

from e in MyContext.MyTable.Where(a => 
DbFunctions.TruncateTime(a.DateTimeColumn) == 
DbFunctions.TruncateTime(DateTime.Now)) select e; 

我發現它here

+2

僅供參考,現在任何人都在看:對於EntityFramework 6,「EntityFunctions」已被棄用,並由「DbFunctions」 – norepro

0

你有兩個選擇

from t in context.MyTable 
where t.MyDate <= maxDate.AddDays(1) 
select t 

from t in context.MyTable 
where t.MyDate.Date <= maxDate.Date 
select t 

第一個可能提供更好的性能,因爲第二可能無法正確地使用你的數據庫索引。但第二個意圖更明顯。

+0

嗯。讓我試試第二個對我來說OK。 –

+0

錯誤: LINQ to Entities不支持指定的類型成員'Date'。僅支持初始化程序,實體成員和實體導航屬性。 –

1

你實際上並沒有搜索只有按日期部分;幕後的那個日期是DateTime。 因此,要獲得該行一天,想想它是這樣的:

我想有MyDate比5月18日午夜大於或等於5月17日午夜,少的所有行。

下面的查詢是這樣做的。

var startDate = new DateTime(2012, 05, 17); 
var endDate = new DateTime(2012, 05, 18); 
var result = 
from row in context.MyTable 
where row.MyDate >= startDate && 
     row.MyDate < endDate 
select row; 
1

我一直在尋找這個答案今天也 - 在這裏找到 Comparing Dates in Linq To SQL

我也是雙與剖析檢查,以確保它被翻譯成SQL

from e in MyContext.MyTable.Where(a => a.DateTimeColumn.Date == DateTime.Now.Date) 
select e;