2011-08-08 15 views
11

Quiero utilizar una expresión en otra:C# expresión dentro de otra expresión

Expression<Func<double, double>> f = x => x * x * 27 + blah ... expression with x; 

Expression<Func<double, double>> g = y => 3 + 8 * f.Compile()(y) * y * blah... expression with y and f(y); 

esto no funcionará cuando se envían a LINQ a SQL porque f.Compile() es desconocido para SQL.

¿Cómo evalúa la expresión f en la variable y sin compilarla, pero sigue usando la sintaxis normal para definir g?

No quiero tener que definir todas las g con algunas declaraciones ilegibles Expression.Add/Expression.Multiply etc.

Gracias.

Respuesta

3

Eche un vistazo a Calling functions in LINQ queries y LINQ Extensions proyecto. La parte CLinq es irrelevante para su pregunta, pero también incluye la biblioteca LinqExt, que es exactamente lo que está buscando. El mismo enfoque también es utilizado por LinqKit que también proporciona otras extensiones útiles para Linq.

+0

+1 Artículos muy interesantes. –

+0

Muchas gracias, descargué LinqKit del enlace que me diste y funciona perfectamente con 'Invoke' y' AsExpandable'. Estoy de acuerdo, artículos muy interesantes. – SemMike

Cuestiones relacionadas