Estoy intentando construir dinámicamente expresiones basadas en un objeto de especificación.Reemplazar el nombre del parámetro en el cuerpo de una expresión
He creado una clase ExpressionHelper que tiene una expresión privada de este modo:
private Expression<Func<T, bool>> expression;
public ExpressionHelper()
{
expression = (Expression<Func<T, bool>>)(a => true);
}
Y entonces algunos métodos sencillos de la siguiente manera:
public void And(Expression<Func<T,bool>> exp);
Estoy luchando con el cuerpo de la Y el método. Básicamente, quiero extraer el cuerpo de exp
, reemplazar todos los parámetros con los de expression
y luego anexarlo al final del cuerpo expression
como AndAlso.
he hecho esto:
var newBody = Expression.And(expression.Body,exp.Body);
expression = expression.Update(newBody, expression.Parameters);
Pero que termina con mi expresión con este aspecto:
{ a => e.IsActive && e.IsManaged }
¿Existe una manera más sencilla de hacer esto? ¿O cómo puedo arrancar esas e's y reemplazarlas con a's?
Maldición, acabo de invocación de trabajo en la memoria y se prueba en EF cuando esto sucedió. Gracias. –
@robert IIRC Invoke no funciona en EF, por lo que deberá utilizar la segunda versión –
Su enfoque funciona, pero ahora tengo su ReWriter asombrosamente complejo y no probado en mi código base. :(Viendo lo inteligente que se ve, lo voy a guardar hasta que lo entiendo! –