2017-06-01 22 views
0

我具有可選條件拉姆達表達一些問題,像可選的條件不工作LINQ

var shouldCheckDate = !string.IsNullOrEmpty(fromDate); 
var result = (from r in db.Notify 
       where r.ApplicationId == applicationId 
       && (shouldCheckDate || r.CreatedDate.Date > date) 
       select r 
      ).Count; 

問題是在這裏總是excuting兩個條件無論是shouldCheckDate真都是假的。我做錯了什麼?

+0

你是什麼意思的「執行這兩個條件」嗎?你的意思是它總是用'r.CreatedDate.Date> date'返回項目? – Evk

+0

顯示錯誤消息。我懷疑.Date是由您的提供商支持的。 – buffjape

+0

把&&代替||條件和檢查 –

回答

4

這是因爲LINQ被轉換爲SQL和SQL,與C#不同,它執行條件的所有部分,而不管它們中的哪一個已經返回true。

0

您有或這裏聲明,

(shouldCheckDate || r.CreatedDate.Date > date) 

因此,即使這些條件是true一個足以讓整個陳述是真實的。

也許r.CreatedDate.Date總是> date

1

您可以通過添加僅在需要時在where子句組成的IQueryable:

var query = db.Notify; 
query = query.Where(r => r.ApplicationId == applicationId); 
if (shouldCheckDate) { 
    query = query.Where(r => r.CreatedDate.Date > date); 
} 
var result = query.Count();