Supponiamo che io abbia qualcosa di simileDa BinaryExpression a Expression <Func <T, bool>>
Expression<Func<SomeType, DateTime>> left = x => x.SomeDateProperty;
Expression<Func<SomeType, DateTime>> right = x => dateTimeConstant;
var binaryExpression = Expression.GreaterThan(left, right);
Expression<Func<SomeType, bool>> predicate =
x => x.SomeDateProperty> dateTimeConstant;
1) Come posso sostituire la mano destra di assegnazione dell'ultima riga con qualcosa che utilizza invece il binaryExpression
? var predicate = x => binaryExpression;
non funziona.
2) Il right
è sempre una costante, non necessariamente DateTime.Now. Potrebbe essere di tipo più semplice Expression
? Ad esempio, non dipende da SomeType, è solo una costante.
3) Se ho lo GreaterThan
come string
, c'è un modo per passare da questa stringa al metodo con lo stesso nome in Expression
? In generale, se il nome del metodo di confronto è indicato come string
, come posso passare dalla stringa per chiamare effettivamente il metodo con lo stesso nome sulla classe Expression
?
Deve funzionare con LINQ alle Entità, se è importante.
È possibile modificare gli alberi di espressione utilizzando la classe ExpressionVisitor. – Steven