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.
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%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?
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.
Tags und Links c# linq lambda anonymous-methods