Ersetzen einer regulären Methode durch eine anonyme Methode in C # / LINQ

8

Ich habe eine LINQ-Abfrage, die folgendermaßen aussieht:

%Vor%

Ich möchte AddMissingProp loswerden und stattdessen eine Form eines Lambda in meiner select -Klausel verwenden.

Ich habe versucht ...

%Vor%

... aber ich habe folgenden Fehler:

  

Eine lokale Variable mit dem Namen 'f' kann in diesem Bereich nicht deklariert werden, da sie 'f' eine andere Bedeutung geben würde, die bereits in einem übergeordneten oder aktuellen Bereich verwendet wird, um etwas anderes zu bezeichnen.

Wie kann ich meine Anfrage "lambdaisieren"?

Aktualisieren

Das funktioniert auch nicht:

%Vor%

Ich erhalte den folgenden Fehler:

  

Der Typ eines der Ausdrücke in der Join-Klausel ist falsch. Typinferenz fehlgeschlagen beim Aufruf von 'Join'.

Ich habe die join -Klausel überhaupt nicht geändert, daher bin ich perplex.

    
devuxer 07.01.2010, 19:56
quelle

5 Antworten

3

Sie können Ihren Parametern in einem Lambda-Ausdruck Typen geben, aber Sie müssen andere Namen verwenden, da Sie in der Abfrage bereits f und b verwenden.

(Foo f1, Balken b1) = & gt; ...

Bearbeiten

%Vor%     
Rodrick Chapman 07.01.2010, 20:00
quelle
5

Ich denke icambron hat Recht, IMHO ist die besser lesbare Version das:

%Vor%

Die from join select -Anweisungen sind für Abfragen, sie sollten nicht zum Mutieren des Inhalts einer Sequenz missbraucht werden.

BEARBEITEN: Hier ist ein weiterer Link , der einige Einblicke bietet Warum ist die Verwendung einer funktionalen Form von ForEach keine gute Idee?

    
Doc Brown 07.01.2010 20:42
quelle
1

auswählen     (f2, b2) = & gt; {f2.MissingProp = b2.MissingProp; return f2}

    
jjacka 07.01.2010 20:04
quelle
1

Schreibe dies mit der Lambda-Syntax neu.

%Vor%

Wenn Sie eine Erklärung für diese Syntax benötigen, lassen Sie es mich wissen.

    
Stan R. 07.01.2010 20:06
quelle
1

Wenn der Compiler nicht in der Lage ist, den korrekten Typ für die Übergabe an Lambda abzuleiten, können Sie den Typ natürlich selbst bestimmen.

Das sollte gut funktionieren:

%Vor%

Beachten Sie, dass Sie, wie Sie bereits bemerkt haben, f nicht wiederverwenden können und hoffen, dass es seine Bedeutung behält. Dies ist eine neue Methodensignatur mit neuen Parametern, daher müssen Sie einen eindeutigen Namen dafür verwenden.

Wenn Sie dies tun, bemerken Sie, dass der Compiler nicht in der Lage ist, selbst herauszufinden, welcher Typ das erste Argument sein soll, aber Sie können es wie oben angeben.

    
quelle

Tags und Links