Frage : Die Zeile price = co?.price ?? 0,
im folgenden Code gibt mir den obigen Fehler. aber wenn ich ?
von co.?
entferne, funktioniert es gut. Ich habe versucht, diesem MSDN-Beispiel zu folgen, wo sie es verwenden ?
on line select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };
Es scheint also, ich muss verstehen, wann ?
mit ??
verwendet werden soll und wann nicht.
Fehler :
%Vor%Ein Ausdrucksbaum lambda darf keinen Null-propagierenden Operator enthalten
Das Beispiel, in dem Sie zitiert haben, verwendet LINQ to Objects, wobei die impliziten Lambda-Ausdrücke in der Abfrage in Delegaten konvertiert werden, während Sie EF oder ähnliches mit IQueryable<T>
-Fragen verwenden , wobei die Lambda-Ausdrücke in Ausdrucksbäume konvertiert werden. Ausdrucksbäume unterstützen nicht den bedingten Nulloperator (oder Tupel).
Mach es einfach auf die alte Art:
%Vor%(Ich glaube, der Null-Koaleszenz-Operator ist in einem Ausdrucksbaum in Ordnung.)
Der Code, zu dem Sie eine Verknüpfung herstellen, verwendet List<T>
. List<T>
implementiert IEnumerable<T>
, aber nicht IQueryable<T>
. In diesem Fall wird die Projektion im Speicher ausgeführt und ?.
funktioniert.
Sie verwenden IQueryable<T>
, was sehr unterschiedlich funktioniert. Für IQueryable<T>
wird eine Repräsentation der Projektion erstellt, und Ihr LINQ-Anbieter entscheidet zur Laufzeit, was damit geschehen soll. Aus Gründen der Abwärtskompatibilität kann ?.
hier nicht verwendet werden.
Abhängig von Ihrem LINQ-Provider können Sie möglicherweise die Ebene .
verwenden und trotzdem keine NullReferenceException
erhalten.
Tags und Links c# linq null-coalescing-operator