2010-12-18 4 views
2

Ich muss eine Liste der Coupons auswählen, die noch nicht abgelaufen sind. Das heißt:Wie behandelt man ein nullable DateTime in einer LINQ-to-SQL-Bedingung?

where Coupon.ExpiresOn > DateTimeUtc.Now 

Problem ist, dass Coupon.ExpiresOn ist ein nullable von Datetime (Datetime?). Der obige Code gibt keine Coupons mit Nullwerten in Coupon.ExpiresOn zurück. Wie kann ich es ändern, um Nullwerte zurückzugeben? Danke für Ihre Hilfe.

Antwort

5

erlauben nulls in Ihrem wo, etwa so:

wo Coupon.ExpiresOn == null || Coupon.ExpiresOn> DateTimeUtc.Now

3

ein oder Ihre where-Anweisung hinzufügen:

where !Coupon.ExpiresOn.HasValue || Coupon.ExpiresOn.Value > DateTimeUtc.Now 
+0

Eigentlich keine. Linq-zu-SQL-Shortcircuits Ihre C# -Kurzschaltung, so dass beide Seiten der Anweisung aufgerufen werden. Ihre Antwort funktioniert immer noch korrekt, aber Sie müssen sich daran erinnern, dass Sie hier Linq-to-SQL verwenden (zumindest der Fragesteller). SQL Server führt keinen Kurzschluss durch und es werden keine Groß- und Kleinschreibung berücksichtigt. Daher müssen Sie genau darauf achten, wie Ihr Linq verwendet wird. – mattmc3

+0

@ Matmc3 das ist ein sehr guter Punkt, ich dachte nicht durch. Ich habe meine Antwort aktualisiert. Vielen Dank! – sgriffinusa

Verwandte Themen