Konvertieren der LINQ Comprehension Query-Syntax in Method Syntax mit Lambda

9

Gibt es ein Werkzeug, einen Prozess oder eine Lösung, die die folgende LINQ-Abfragesyntax in Methodensyntax mit Lambdas (Punktnotation) konvertiert? Ich würde erwarten, dass die Lösung die folgende Abfragesyntax in eine Methodensyntax wie diese konvertiert.

%Vor%

Zu den folgenden

%Vor%

Ich möchte das verwenden, um Method Syntax besser zu lernen.

    
Mike Barlow - BarDev 03.03.2013, 02:52
quelle

3 Antworten

16

LINQPad ist ein gutes Werkzeug für das, was Sie brauchen. Ich "gestohlen" den folgenden Screenshot von ihrer Website, um besser zu veranschaulichen, wie es funktioniert. Wenn Sie eine Abfrage mit der Linq-Syntax schreiben, können Sie auf die rot hervorgehobene Schaltfläche klicken, um die entsprechende Lambda-Syntax zu sehen:

    
Rui Jarimba 03.03.2013, 21:47
quelle
7

Wenn wir erzwingen, dass die Abfragesyntax einen Typ von IQueryable zurückgibt, können wir zur Methodensyntax gelangen.

Hier habe ich die Abfrage geändert, um den Typ von IQueryable zurückzugeben:

%Vor%

Im vorherigen Code haben wir "AsQueryable () zum Listentyp" allEmployees "hinzugefügt. Der Rückgabetyp ist nun IQueryable, also wird" filteredEmployees "nun vom Typ" IQueryable "sein. Dann auf" filteredEmployees "alles was wir tun Sie müssen die Methode "ToString ()" aufrufen.

Und das Folgende wird in die Konsole geschrieben.

%Vor%

Es ist nicht perfekt, aber wir können dies leicht zu den folgenden

bearbeiten %Vor%

Im vorherigen Code habe ich "System.Collections.Generic.List1 [UserQuery + Employee]" entfernt und durch "allEmployees" ersetzt. Ich ersetze auch "AndAlso" durch "& amp; & amp;".

Dies liefert die gleichen Ergebnisse wie die Abfrage in der Abfragesyntax.

    
Mike Barlow - BarDev 03.03.2013 02:52
quelle
2

Sie können einen direkteren Ausdruck erhalten, indem Sie einen Lambda-Ausdruck deklarieren, der ein Objekt erzeugt. Der tatsächliche Ausdruck ist die Abfrage, die Sie mithilfe der Abfragesyntax sehen möchten. Anschließend können Sie durch Überprüfen des vom Compiler generierten Ausdrucksbaums sehen, welche Methodenaufrufe vorgenommen werden, ohne die ursprüngliche Abfrage ändern zu müssen.

%Vor%

Wenn Sie IQueryable<> verwenden, wird dort nicht dieselbe Abfrage erzeugt, sondern leicht geändert. Der AsQueryale() Aufruf muss ignoriert werden. Es gibt auch die Möglichkeit, dass der Abfrageprovider den Ausdruck neu schreiben kann, sodass das, was Sie mit ToString() zurückbekommen, keine 1: 1-Entsprechung hat. Der vom Compiler erzeugte Ausdruck entspricht genau dem, was Sie erwarten würden.

    
Jeff Mercado 03.03.2013 03:47
quelle