2012-06-25 52 views
1

我有一個簡單的LINQ查詢。如果數據庫中有條目,我只想檢查DateDisable。如果用戶沒有選擇日期來禁用該條目將始終顯示。可有人請告訴我如何LINQ如果數據庫中有日期,比較日期

return (from promo in context.Promoes 
     where promo.DateEnable <= DateTime.Today 
     where promo.DateDisable >= DateTime.Today 
     orderby promo.SortOrder 
     select promo).ToList(); 
+0

'DateDisable'是'DateTime?'嗎?如果是這樣,那麼這不僅僅是檢查'promo.DateDisable!= null'的問題嗎? – casperOne

+0

它是空的,如果值是那裏,然後我想要檢查它雖然 –

回答

2

Given that DateEnable is a DateTime?中添加一個條件語句,你可以做到以下幾點:

// Get today. 
DateTime today = DateTime.Today; 

return (
    from promo in context.Promoes 
    where 
     promo.DateEnable <= today && 
     (promo.DateDisable == null || promo.DateDisable >= today) 
    orderby promo.SortOrder 
    select promo 
).ToList(); 

基本上,你需要檢查null與否日期大於今天。

另外,您應該捕獲語句外的值,但不能保證LINQ提供程序將在數據庫端正確翻譯DateTime.Today

然而,予以警告,因爲延遲執行的,如果你等待很長的時間來執行查詢,today可能不會給你所期望的價值(如果聲明的查詢和執行之間的時間就推出過了午夜)。當然,如果你的數據庫服務器與你的應用服務器在不同的時區,那麼你需要確保你的LINQ提供者正確地處理了DateTime.Today(這樣它才能在服務器上執行)並使用它您想要在數據庫服務器上與時間進行比較。如果您的提供商手柄轉換DateTime.Today正確的,那麼你就必須訴諸於一個存儲過程和調用。