Lambda Ausdruck, der in der Select () - Abfrage verwendet werden soll

8

Ich versuche, einen Lambda-Ausdruck zu erstellen, der zwei Zuweisungen enthält (wie weiter unten gezeigt), die ich dann an eine Queryable.Select () -Methode übergeben kann.

Ich versuche, eine String-Variable in eine Methode zu übergeben und dann diese Variable zu verwenden, um den Lambda-Ausdruck aufzubauen, damit ich ihn in einer LINQ Select-Abfrage verwenden kann.

Meine Überlegungen dahinter sind, dass ich eine SQL Server-Datenquelle mit vielen Spaltennamen habe. Ich erstelle eine Charting-Anwendung, die es dem Benutzer ermöglicht, durch Eingabe des Spaltennamens die gewünschte Datenspalte auszuwählen Ansicht in der Y-Achse meines Diagramms, wobei die X-Achse immer die DateTime ist. Daher können sie im Wesentlichen auswählen, welche Daten sie für den DateTime-Wert darstellen (es handelt sich um eine Data-Warehouse-App).

Ich habe zum Beispiel eine Klasse, in der die abgerufenen Daten gespeichert werden und daher als Diagrammquelle für Folgendes verwendet werden:

%Vor%

Ich habe (rein experimentell) einen Ausdrucksbaum für die Where-Klausel mit dem String-Wert erstellt, und das funktioniert gut:

%Vor%

Wie auch immer ... Ich habe einen ähnlichen Ansatz für die Select-Anweisung versucht, kann es aber nicht ausführen, da ich die Select-Taste () brauche, um sowohl die X- als auch die Y-Werte der AnalysisChartSource-Klasse zu füllen. p> %Vor%

Wie um alles in der Welt kann ich einen solchen Ausdrucksbaum bauen ... oder ... vielleicht noch mehr auf den Punkt ... ... gibt es einen leichteren Weg, den ich völlig vermisst habe?

    
jameschinnock 27.04.2010, 08:31
quelle

1 Antwort

15

Ich finde, dass der beste Weg, um herauszufinden, wie man Ausdrucksbäume erstellt, darin besteht, zu sehen, was der C # -Compiler tut. Also hier ist ein komplettes Programm:

%Vor%

Kompilieren Sie das, öffnen Sie die Ergebnisse in Reflector und setzen Sie die Optimierung auf .NET 2.0. Sie erhalten diesen generierten Code für die Main-Methode:

%Vor%

Grundsätzlich denke ich Expression.MemberInit ist das, wonach du suchst.

>     
Jon Skeet 27.04.2010, 08:39
quelle

Tags und Links