2010-08-07 9 views
7

Sto cercando di creare predicato dinamico in modo che possa essere usato contro un elenco per il filtraggioCreazione dinamica Predicates- passando proprietà per una funzione come parametro di

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

voglio essere in grado di creare un predicato dinamica in modo che un elenco può essere filtrato. Ottengo poche condizioni come valori stringa ">", "<", "> =" ecc. C'è un modo in cui posso farlo?

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 
      }    
} 

e l'utilizzo potrebbe essere:

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

Come è opportuno definire il GetFilter? e come creare il predicato al suo interno?

risposta

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

Tutte le domande? :-)

+0

Grazie mille !!! Ha funzionato! – venkod

Problemi correlati