DefaultIfEmpty () funktioniert nicht

8

Hallo, ich versuche, DefaultIfEmpty() function auf IQueryable zu verwenden, und es wird eine Ausnahme ausgelöst. "Nicht unterstützte Überladung wird für den Abfrageoperator 'DefaultIfEmpty' verwendet." Das ist mein Code:

%Vor%

Ich habe einen anderen Weg gefunden, es ohne DefaultIfEmpty zu machen, aber ich möchte immer noch wissen, wie ich das lösen kann ... hier ist der erste Teil der Ausnahme:

  

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.

     

Ausnahmedetails: System.NotSupportedException: Nicht unterstützte Überladung für den Abfrageoperator 'DefaultIfEmpty'.

    
Ella Cohen 16.08.2011, 19:55
quelle

3 Antworten

14

Es scheint mir ziemlich selbsterklärend zu sein:

  

Nicht unterstützte Überladung für den Abfrageoperator 'DefaultIfEmpty'

Klingt wie Ihr LINQ-Provider (den Sie nicht angegeben haben) die Überladung von DefaultIfEmpty nicht unterstützt, die einen Standardwert verwendet.

Die einfachste Alternative ist wahrscheinlich zu verwenden:

%Vor%

Beachten Sie, dass dieser Ansatz das Abrufen des "Standard" Abendessens vermeidet, es sei denn es ist erforderlich, also ist es auch effizienter.

(Wenn es für eine ID nur ein einziges Ergebnis geben sollte, sollten Sie übrigens SingleOrDefault anstelle von FirstOrDefault verwenden. Das ist logischer.)

    
Jon Skeet 16.08.2011, 19:59
quelle
2

Probieren Sie

aus %Vor%     
sll 16.08.2011 19:57
quelle
1

Die Methode DefaultIfEmpty gibt NotSupportedException aus, wenn sie in IQueryable<T> aufgerufen wird. Sie könnten eine explizite Umwandlung in IEnumerable<T> durchführen, indem Sie db.Dinners.Where(d => d.DinnerId == id).ToEnumerable().First() aufrufen.

Sie sollten diese Methode wahrscheinlich nicht verwenden . Es ist besser, nur zu überprüfen, ob der Aufruf irgendwelche Werte zurückgegeben hat, und den Standard wiederherzustellen, wenn dies nicht der Fall ist.

Bearbeiten : Oop. Nein, Jon Skeet hat Recht. Die DefaultIfEmpty -Verlängerungsmethode basiert auf einer Implementierung des Abfrageanbieters. Daher hängt sie definitiv davon ab, welcher Abfrageanbieter verwendet wird.

    
BishopRook 16.08.2011 20:04
quelle

Tags und Links