Ho un Func come questo:Come convertire Func <T,bool> a Expression <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Come posso convertirlo in:
Expression<Func<MyClass, bool>>
Ho un Func come questo:Come convertire Func <T,bool> a Expression <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
Come posso convertirlo in:
Expression<Func<MyClass, bool>>
provate questo:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
In questo modo si imposta 'expr' come chiamata a un delegato che accetta un' MyClass' e restituisce un 'bool'. 'expr' non manterrà un albero di sintassi per l'attuale lambda. – Sean
Sì, lo è. E allora? Forse l'autore della domanda dovrebbe essere proprio questo. – Memoizer
Questa risposta non dovrebbe essere accettata. Il metodo non viene convertito in espressione di sorta. –
È possibile creare un'espressione che rappresenti la chiamata al delegato creato. Ma la maggior parte delle volte, quando si utilizza Expression
s, lo si fa per capire cosa fa il codice (ad esempio per convertirlo in SQL). E non puoi farlo con un'espressione per invocare una funzione opaca.
Si può solo scrivere:
Expression<Func<MyClass,bool>> expr = x=>Id == 5;
questo imposterà expr
di essere un albero di espressione per Id == 5
.
Se lo fai:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
allora questo sarà impostato expr
di essere un albero di espressione per una chiamata a func
, non un albero di espressione per il corpo del func
.
L'espressione è una rappresentazione intermedia di una funzione Lambda. Func è la funzione lambda compilata stessa. Non pensare di poter convertire tra i due. Perché hai bisogno di farlo? – akhisp