Je tente de créer de manière dynamique des expressions basées sur un objet Specification.Remplacement du nom du paramètre dans le corps d'une expression
J'ai créé une classe ExpressionHelper qui a une expression privée comme ceci:
private Expression<Func<T, bool>> expression;
public ExpressionHelper()
{
expression = (Expression<Func<T, bool>>)(a => true);
}
Et puis quelques méthodes faciles comme suit:
public void And(Expression<Func<T,bool>> exp);
Je suis aux prises avec le corps du Et méthode Je veux fondamentalement déchirer le corps de exp
, remplacer tous les paramètres avec ceux dans expression
et l'ajouter ensuite à la fin du corps expression
et AndAlso.
Je l'ai fait:
var newBody = Expression.And(expression.Body,exp.Body);
expression = expression.Update(newBody, expression.Parameters);
Mais qui finit avec mon expression qui ressemble à ceci:
{ a => e.IsActive && e.IsManaged }
est-il un moyen plus simple de le faire? Ou comment puis-je déchirer ces e et les remplacer par un?
Zut, JUSTE a Invoke travail en mémoire et testait sur EF lorsque cela est arrivé. Merci. –
@robert IIRC Invoke ne fonctionne pas sur EF, donc vous devrez utiliser la seconde version –
Votre approche fonctionne mais maintenant j'ai votre ReWriter incroyablement complexe et non testé dans mon code. :(Voir à quel point il semble intelligent, je vais le garder jusqu'à ce que je le comprends! –