2017-06-01 3 views
0

ich in Lambda Express hat ein Problem in Optional Zustand mit wieOptional Zustand nicht Linq arbeitet

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

Problem ist hier es sowohl Bedingung immer Executing entweder shouldCheckDate true false sind. Ich mache etwas falsch?

+0

Was meinen Sie mit „beiden Bedingungen ausführen“? Du meinst es gibt immer Items mit 'r.CreatedDate.Date> date' zurück? – Evk

+0

Zeigt die Fehlermeldung an. Ich bezweifle, dass .Date von Ihrem Provider unterstützt wird. – buffjape

+0

put && anstelle von || Zustand und überprüfen –

Antwort

4

Dies ist aufgrund der Tatsache, dass LINQ in SQL übersetzt wird und SQL, im Gegensatz zu C#, führt alle Teile einer Bedingung, egal ob einer von ihnen bereits wahr zurückgegeben.

0

Sie haben OR-Anweisung hier,

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

so auch nur eine dieser Bedingungen, die true ist genug für ganze Aussage wahr zu sein.

Vielleicht r.CreatedDate.Date ist immer > date?

1

Sie können die IQueryable komponieren, indem nur die where-Klauseln Hinzufügen bei Bedarf:

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();