Como criar uma LambdaExpression a partir de uma LambdaExpression existente sem compilar
Eu quero combinar duas LambdaExpressions sem compilá-la
Isto é o que parece se eu os compilar:
public Expression<Func<TContainer,bool>> CreatePredicate<TContainer,TMember>(
Expression<Func<TContainer,TMember>> getMemberExpression,
Expression<Func<TMember,bool>> memberPredicateExpression)
{
return x => memberPredicateExpression.Compile()(getMemberExpression.Compile()(x));
}
Obviamente, essa não é a maneira mais rápida de obter a expressão de destino a partir dos argumentos fornecidos. Além disso, torna-o incompatível com provedores de consulta como LINQ to SQL que não suportam chamadas de método C #.
Pelo que li, parece que a melhor abordagem é criar umExpressionVisitor
classe. No entanto, isso parece ser uma tarefa bastante comum. Alguém sabe de uma base de código-fonte aberto existente que fornece esse tipo de funcionalidade? Caso contrário, qual é a melhor maneira de abordar oExpressionVisitor
para torná-lo o mais genérico possível?