2010-08-07 6 views
7

Je suis en train de créer prédicats dynamique afin qu'il puisse être utilisé contre une liste pour filtrerCréation dynamique Predicates- passage dans la propriété à une fonction en tant que paramètre

public class Feature 
{ 
    public string Color{get;set;} 
    public string Weight{get;set;} 
} 

Je veux être en mesure de créer un prédicat dynamique de sorte qu'une liste puisse être filtrée. Je reçois peu de conditions comme les valeurs de chaîne ">", "<", "> =" etc. Existe-t-il un moyen par lequel je peux faire cela?

public Predicate<Feature> GetFilter(X property,T value, string condition) //no clue what X will be 
{ 
      switch(condition) 
      { 
       case ">=": 
       return new Predicate<Feature>(property >= value)//or something similar 
      }    
} 

et l'utilisation pourrait être:

var filterConditions=GetFilter(x=>x.Weight,100,">="); 

Comment définir le GetFilter? et comment créer le prédicat à l'intérieur de cela?

Répondre

14
public Predicate<Feature> GetFilter<T>(
    Expression<Func<Feature, T>> property, 
    T value, 
    string condition) 
{ 
    switch (condition) 
    { 
    case ">=": 
     return 
      Expression.Lambda<Predicate<Feature>>(
       Expression.GreaterThanOrEqual(
        property.Body, 
        Expression.Constant(value) 
       ), 
       property.Parameters 
      ).Compile(); 

    default: 
     throw new NotSupportedException(); 
    } 
} 

Des questions? :-)

+0

Merci beaucoup! Ça a marché! – venkod

Questions connexes