Comment créer dynamiquement une expression <Func<MyClass, bool> &gt; prédicat?

c# expression-trees lambda linq

Question

Comment pourrais-je utiliser un arbre d'expression pour créer dynamiquement un prédicat ressemblant à quelque chose comme ...

(p.Length== 5) && (p.SomeOtherProperty == "hello") 

Pour que je puisse coller le prédicat dans une expression lambda comme si ...

(p.Length== 5) && (p.SomeOtherProperty == "hello") 

J'ai juste besoin d'être dirigé dans la bonne direction.

Mise à jour: Désolé, j'ai omis le fait que je souhaite que le prédicat ait plusieurs conditions, comme ci-dessus. Désolé pour la confusion.

Réponse acceptée

Original

Ainsi:

    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);

Actualisé

re (p.Length== 5) && (p.SomeOtherProperty == "hello") :

    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);

Réponse populaire

Utilisez le générateur de prédicat.

http://www.albahari.com/nutshell/predicatebuilder.aspx

C'est assez facile!




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi