Ein ähnliches Beispiel: Übergeben eines Linq-Ausdrucks als String?
Eine weitere Frage mit der gleichen Antwort: Erstellen eines dynamischen Lambda-basierten Linq-Ausdrucks aus einer Zeichenfolge in C #?
Grund dafür, etwas zu fragen, das so viele ähnliche Fragen hat:
Die akzeptierte Antwort in diesen ähnlichen Fragen ist inakzeptabel, da sie alle auf eine Bibliothek von vor vier Jahren verweisen (vorausgesetzt, dass sie von Code-Master Scott Gu geschrieben wurde), geschrieben für ein altes Framework (.net 3.5), und nicht bereitstellt alles andere als eine Verbindung als Antwort.
Es gibt eine Möglichkeit, dies im Code ohne eine ganze Bibliothek zu tun.
Hier ist ein Beispielcode für diese Situation:
%Vor%Beachten Sie, dass hier nicht versucht wird, eine ganze Zeichenfolge in einen Ausdruck wie
umzuwandeln %Vor%Stattdessen wird versucht, nur die Zeichenfolge als Zugriff zu verwenden
%Vor%Hier ist ein Ausdruck Baum Versuch. Ich weiß immer noch nicht, ob das mit dem Entity-Framework funktionieren würde, aber ich denke, es ist einen Versuch wert.
%Vor%Nennen Sie es so:
%Vor% Wenn Sie Expression<Func<T,int>>
anstelle von nur Func
verwenden können, entfernen Sie einfach den Aufruf von Compile
(und ändern Sie die Signatur von MakeGetter
).
Bearbeiten :
In den Kommentaren fragte TravisJ, wie er es so benutzen könnte: w => "text" + w.classTypeId
Es gibt mehrere Möglichkeiten, dies zu tun, aber aus Gründen der Lesbarkeit würde ich empfehlen, zuerst eine lokale Variable wie folgt einzuführen:
%Vor% Der Hauptpunkt ist, dass der Getter nur eine Funktion ist, und Sie können sie genau so verwenden, wie Sie es normalerweise tun würden. Lies Func<T,int>
wie folgt: int DoSomething(T instance)
Ich habe das nicht versucht und bin mir nicht sicher, ob es funktionieren würde, aber könntest du etwas wie:
verwenden b => b.GetType().GetProperty(classTypeId).GetValue(b, null);
Tags und Links asp.net-mvc-3 c# linq generics