Come utilizzerei un albero delle espressioni per creare dinamicamente un predicato simile a qualcosa ...
(p.Length== 5) && (p.SomeOtherProperty == "hello")
In modo che io possa attaccare il predicato in un'espressione lambda così ...
q.Where(myDynamicExpression)...
Ho solo bisogno di essere indicato nella giusta direzione.
Aggiornamento: Scusate la gente, ho omesso il fatto che voglio che il predicato abbia più condizioni come sopra. Dispiace per la confusione.
Originale
Così:
var param = Expression.Parameter(typeof(string), "p");
var len = Expression.PropertyOrField(param, "Length");
var body = Expression.Equal(
len, Expression.Constant(5));
var lambda = Expression.Lambda<Func<string, bool>>(
body, param);
aggiornato
re (p.Length== 5) && (p.SomeOtherProperty == "hello")
:
var param = Expression.Parameter(typeof(SomeType), "p");
var body = Expression.AndAlso(
Expression.Equal(
Expression.PropertyOrField(param, "Length"),
Expression.Constant(5)
),
Expression.Equal(
Expression.PropertyOrField(param, "SomeOtherProperty"),
Expression.Constant("hello")
));
var lambda = Expression.Lambda<Func<SomeType, bool>>(body, param);
Utilizzare il generatore di predicati.
http://www.albahari.com/nutshell/predicatebuilder.aspx
È piuttosto facile!