ich eine Func wie dieses:Wie Func konvertieren <T,bool> zu Expression <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Wie ich es umwandeln kann: diese
Expression<Func<MyClass, bool>>
ich eine Func wie dieses:Wie Func konvertieren <T,bool> zu Expression <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Wie ich es umwandeln kann: diese
Expression<Func<MyClass, bool>>
Versuchen:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
Dies setzt 'expr' als Aufruf an einen Delegaten, der eine' MyClass' übernimmt und eine 'bool' zurückgibt. 'expr' enthält keinen Syntaxbaum für das tatsächliche Lambda. – Sean
Ja, ist es. Na und? Vielleicht sollte der Autor der Frage genau das sein. – Memoizer
Diese Antwort sollte nicht akzeptiert werden. Die Methode wird nicht in Ausdruck konvertiert. –
Sie können einen Ausdruck erstellen, der den Aufruf des von Ihnen erstellten Delegaten darstellt. Aber meistens, wenn Sie Expression
s verwenden, tun Sie das, um zu verstehen, was der Code tut (z. B. um ihn in SQL zu konvertieren). Und Sie können das nicht mit einem Ausdruck tun, um eine undurchsichtige Funktion aufzurufen.
Sie können einfach schreiben:
Expression<Func<MyClass,bool>> expr = x=>Id == 5;
Diese expr
gesetzt wird Id == 5
ein Ausdruck Baum.
Wenn Sie das tun:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
Dann ist diese expr
gesetzt wird ein Ausdrucksbaum für einen Anruf zu func
, kein Ausdruck Baum für den Körper von func
zu sein.
Ausdruck ist eine mittlere Darstellung einer Lambda-Funktion. Func ist die kompilierte Lambda-Funktion selbst. Glauben Sie nicht, dass Sie zwischen den beiden konvertieren können. Warum musst du das tun? – akhisp