Linq-Abfrage funktioniert mit null, aber nicht int? in where-Klausel

7

Ich habe eine linq-Abfragefunktion wie (vereinfacht):

%Vor%

Nun, aus irgendeinem Grund, wenn ich null für die parentID übergebe (habe zur Zeit nur Daten mit null parentIDs) und bekomme keine Ergebnisse.

Ich kopiere diese Abfrage und füge sie in LinqPad ein und führe folgendes aus:

%Vor%

Ich bekomme eine Ergebnismenge wie erwartet zurück ...

Die eigentliche Abfrage hat Joins und andere Joins verlassen, aber ich habe sie entfernt und getestet und das gleiche Ergebnis erhalten, so dass die Joins nichts beeinflussen. Die App und LinqPad sind beide mit der gleichen Datenbank verbunden.

Bearbeiten: Getestet mit nur 'null' in der Anwendungsabfrage und es gibt das Ergebnis wie erwartet zurück, so dass das Problem null vs int? verwendet. Ich habe die Frage aktualisiert, um sie für andere mit demselben Problem nützlicher zu machen, um diesen Thread zu finden.

    
Kelsey 28.07.2009, 15:25
quelle

2 Antworten

19

Literal null -Werte werden anders behandelt als Parameter, die Null sein könnten. Wenn Sie explizit gegen null testen, verwendet das generierte SQL den Operator IS NULL , aber wenn Sie einen Parameter verwenden, wird der Standardoperator = verwendet, was bedeutet, dass keine Zeile übereinstimmt, weil in SQL null ist nichts gleich. Dies ist eine der nervigeren semantischen .NET / SQL-Übereinstimmungen in LINQ to SQL. Um es zu umgehen, können Sie eine Klausel wie:

verwenden %Vor%     
kvb 28.07.2009, 15:42
quelle
0

Sie können auch etwas wie ...

verwenden %Vor%

Es hat für mich funktioniert! hoffe es funktioniert für dich!

    
Tokstow 27.11.2009 13:54
quelle

Tags und Links