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.
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:
Tags und Links c# linq linq-to-sql linqpad