2011-04-13 60 views
3

據我得爲這樣:LINQ的選擇,其中日期是昨天

DateTime yesterday = DateTime.Today.AddDays(-1); 
YesterdaysRegistrations = db.tblForumAuthors.Where(c => c.Join_date == yesterday).Count(); 

肯定有記載,有參加昨天的日期,但它返回0所有的時間!任何人都可以告訴我,如果我正確地做到這一點?

+0

一起存儲在加入時或剛日期那些'Join_date'領域? – 2011-04-13 20:32:51

+0

@Lasse,他們有時間,但我不知道如何去掉linq語句 – 2011-04-13 20:33:26

+0

你可以只用'c.Join_date.Date'去掉時間和比較,還是我錯過了什麼? – R0MANARMY 2011-04-13 20:43:26

回答

8

AddDays保留小時/分鐘/秒組件。你要麼必須使用(如果c.Join_date只是日期部分):

DateTime yesterday = DateTime.Today.AddDays(-1).Date; 

否則,就可以比較範圍:

DateTime yesterday = DateTime.Today.AddDays(-1).Date; 
DateTime yesterdayEnd = DateTime.Today.Date.AddSeconds(-1); 
db.tblForumAuthors.Where(c => c.Join_date >= yesterday && c.Join_date < yesterdayEnd) 
+0

如果有人在午夜前加入半秒,該怎麼辦?你不需要減去第二個。 – 2011-04-13 20:35:36

+0

謝謝,但沒有運氣,在數據庫領域有時間以及我認爲是停止工作? – 2011-04-13 20:35:47

+1

不正確。如果數據庫只保存日期組件,則兩個對象的小時/分鐘/秒將爲0,其值爲真。 – Femaref 2011-04-13 20:36:34

3

你不必脫光的時候,你只需要確保你沒有完全匹配。

試試這個:

DateTime today = DateTime.Today; // read once, avoid "odd" errors once in a blue moon 
DateTime yesterday = today.AddDays(-1); 
YesterdaysRegistrations = db.tblForumAuthors.Where(
    c => c.Join_date >= yesterday 
     && c.Join_date < today).Count(); 
相關問題