2010-08-07 9 views
7

I dynamisches Prädikat zu schaffen versuchen, so dass esErstellen dynamische Predicates- auf eine Funktion als Parameter in Eigenschaft vorbei

zum Filtern mit einer Liste verwendet werden kann
public class Feature 
{ 
    public string Color{get;set;} 
    public string Weight{get;set;} 
} 

ich ein dynamisches Prädikat in die Lage sein will, erstellen damit eine Liste gefiltert werden kann. Ich bekomme wenige Bedingungen als String-Werte ">", "<", "> =" usw. Gibt es eine Möglichkeit, wie ich das machen kann?

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

und die Nutzung sein könnte:

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

Wie soll die GetFilter definiert werden? und wie man das Prädikat darin herstellt?

Antwort

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

Haben Sie Fragen? :-)

+0

Vielen Dank !!! Es funktionierte! – venkod