2010-08-07 16 views
7

मैं गतिशील विधेय बनाने के लिए कोशिश कर रहा हूँ इतना है कि यहबनाना गतिशील Predicates- पैरामीटर

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

छानने के लिए एक सूची के खिलाफ इस्तेमाल किया जा सकता मैं एक गतिशील विधेय बनाने के लिए सक्षम होना चाहते हैं के रूप में एक समारोह के लिए संपत्ति में गुजर ताकि एक सूची फ़िल्टर किया जा सके। मुझे स्ट्रिंग मानों ">", "<", "> =" आदि जैसी कुछ स्थितियां मिलती हैं। क्या कोई तरीका है जिसके द्वारा मैं यह कर सकता हूं?

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

और उपयोग किया जा सकता है:

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

कैसे GetFilter परिभाषित किया जाना चाहिए? और उसमें भविष्यवाणी कैसे बनाएं?

उत्तर

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

कोई प्रश्न? :-)

+0

धन्यवाद एक टन !!! इसने काम कर दिया! – venkod

संबंधित मुद्दे