9 Stimmen

LINQ-Abfragesyntax zu Lambda

Ich frage mich, ob es eine Möglichkeit gibt, die Lambda-Ausdrücke zu erhalten, die aus einem LINQ "Abfrage" Syntaxausdruck resultieren.

Gegeben:

var query = from c in dc.Colors
            where c.ID == 213
            orderby c.Name, c.Description
            select new {c.ID, c.Name, c.Description };

Gibt es eine Möglichkeit, den generierten "Lambda"-Code/Ausdruck zu erhalten?

var query = dc.Colors
    .Where(c => c.ID == 213)
    .OrderBy(c => c.Name)
    .ThenBy(c => c.Description)
    .Select(c => new {c.ID, c.Name, c.Description, });

Ich weiß, dass dies sehr einfache Beispiele sind und dass der C#-Compiler beim Kompilieren des Codes einen Lambda-Ausdruck aus dem Abfrageausdruck erzeugt. Gibt es eine Möglichkeit, eine Kopie dieses Ausdrucks zu erhalten?

Ich hoffe, dies als Schulungsinstrument für einige meiner Teammitglieder verwenden zu können, die mit Lambda-Ausdrücken nicht sehr vertraut sind. Außerdem habe ich Linq Pad verwendet, aber im Idealfall kann dies ohne ein Drittanbieter-Tool erreicht werden.

5voto

Joe Albahari Punkte 28989

Gehen Sie einfach:

string lambdaSyntax = query.Expression.ToString();

Der Nachteil gegenüber LINQPad ist, dass das Ergebnis in einer einzigen Zeile formatiert wird.

3voto

Orion Edwards Punkte 117361

Sie könnten versuchen, die Baugruppe zu kompilieren und sie dann mit Reflector zu überprüfen.

Dies könnte allerdings etwas komplizierter sein, als Sie es sich wünschen, da der Compiler die Dinge bis hinunter zu den direkten Methodenaufrufen kompiliert (alles sind statische Methodenaufrufe, keine Erweiterungsmethoden, und die Lambdas werden in ihre eigenen Funktionen kompiliert, die normalerweise so heißen <ClassName>b_88f )

Du wirst aber sicher herausfinden, was los ist :-)

2voto

JP Alioto Punkte 44283

ReSharper hat diese Funktion. Es wird eine LINQ zu Lambda und wieder zurück auf einen Tastendruck zu nehmen. Auch sehr (sehr) nützlich für andere Dinge.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X