Mam Func takiego:Jak przekonwertować Func <T,bool> ekspresji <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Jak mogę przekonwertować go do:
Expression<Func<MyClass, bool>>
Mam Func takiego:Jak przekonwertować Func <T,bool> ekspresji <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Jak mogę przekonwertować go do:
Expression<Func<MyClass, bool>>
Spróbuj tego:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
To faktycznie ustawia 'wyr 'na wywołanie do delegata, który bierze' MyClass' i zwraca 'bool'. 'expr' nie będzie przechowywać drzewa składni dla rzeczywistej lambda. – Sean
Tak, jest. Więc co? Być może autor pytania powinien być po prostu tym. – Memoizer
Ta odpowiedź nie powinna być akceptowana. Metoda nie jest konwertowana na wyrażenie. –
Możesz utworzyć wyrażenie reprezentujące połączenie z delegatem, który utworzyłeś. Ale większość czasu, gdy używasz Expression
s, robisz to, aby zrozumieć, co robi kod (na przykład, aby przekonwertować go do SQL). Nie można tego zrobić za pomocą wyrażenia wywołującego funkcję nieprzezroczystą.
można po prostu napisać:
Expression<Func<MyClass,bool>> expr = x=>Id == 5;
Spowoduje to ustawienie expr
być drzewo wyrażenie Id == 5
.
Jeśli zrobić:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
Wtedy to ustawić expr
być drzewo wyrażenie na wezwanie do func
, a nie drzewa wyrażenie dla ciała func
.
Wyrażenie jest pośrednim przedstawieniem funkcji Lambda. Func to skompilowana funkcja lambda. Nie myśl, że możesz dokonać konwersji między tymi dwoma. Dlaczego musisz to robić? – akhisp