2010-01-06 201 views
2

我有一個簡單LinqToSql查詢LinqToSql的日期問題

from p in GL_PROJECTs 
where p.CREATE_DT == new DateTime(2009,10,26) 
select new p 

一些在數據庫中的記錄都創建一個比其它00:00:00時間部分日期,因此不會通過此查詢來retreived。我想要實現的是一整天的時間不敏感檢索。

我嘗試以下,添加日期,企圖比較喜歡像:

from p in GL_PROJECTs 
where p.CREATE_DT.Date >= new DateTime(2009,10,26) 
select new p 

但LinqPad我得到以下錯誤:

'System.Nullable' does not contain a definition for 'Date' and no extension method 'Date' accepting a first argument of type 'System.Nullable' could be found (press F4 to add a using directive or assembly reference)

任何想法,爲什麼這不工作以及我能做些什麼來使它工作?

感謝

回答

2

只是檢查範圍

from p in GL_PROJECTs 
where p.CREATE_DT >= new DateTime(2009,10,26) && 
     p.CREATE_DT < new DateTime(2009,10,27) 
select new p 
0

如果它是可空的,你需要先使用Value屬性,然後調用該Date

p.CREATE_DT.Value.Date 

也就是說,使用Date屬性將返回帶有午夜時間戳的日期,因此它仍然會與時間相關它。這對你描述的內容沒有幫助。您可以使用@AlbertEin's建議並檢查範圍。

0

如果允許CREATE_DT在數據庫中具有NULL值,它將被映射到.net中的Date?類型(這是泛型類型Nullable<Data>)。

您可以通過其Value屬性檢索Nullable類型的實際日期。

嘗試

from p in GL_PROJECTs 
where p.CREATE_DT.Value.Date == new DateTime(2009,10,26) 
select new p 

但是,如果一個CREATE_DT真的是零,這將引發異常。爲避免此異常,您必須確保Nullable類型確實包含值:

from p in GL_PROJECTs 
where p.CREATE_DT.HasValue && p.CREATE_DT.Value.Date == new DateTime(2009,10,26) 
select new p 
+0

實際上 - 如果Create_DT爲null,則不會拋出.Value。你只是說。值得讓編譯器感到高興。當查詢在sql數據庫上運行時,它沒有.Value操作,並且可以將null與2009-10-26進行比較(答案是'null',它不是'true',因此記錄被過濾掉了) 。 – 2010-01-06 19:15:24