2013-02-01 30 views
8

में बनाए गए एक अवांछित कनवर्ट जोड़ता है मेरे पास एक लिनक में उपयोग किए जाने वाले अभिव्यक्ति उत्पन्न करने के लिए एक फ़ंक्शन है जहां खंड।अभिव्यक्ति <Func<T,bool>> जेनेरिक विधि

public static Expression<Func<T,bool>> GetWhereCondition<T>() where T : IActive 
{ 
    return x => x.Active; 
} 

(ध्यान दें IActive केवल संपत्ति 'सक्रिय' को परिभाषित करता है)

अन्य संबंधित कार्यों रहे हैं और विचार है कि मैं व्यापार के नियम, आदि

नियंत्रित करने के लिए एक सामान्य वर्ग में आवश्यक शर्तों इंजेक्षन कर सकते हैं

x => Convert(x).Active 

कौन सा कोर्स rej की है:

समस्या यह है कि जब मैं इस चलाने के लिए, लौटे अभिव्यक्ति lamda (डिबगर से देखा) शामिल है linq द्वारा ected: 'LINQ से इकाइयों केवल कास्टिंग इकाई डेटा मॉडल आदिम प्रकार का समर्थन करता है।'

अतः मेरे सवाल है ...

मैं इस व्यवहार को कैसे रोकूं। रूपांतरण की कोई आवश्यकता नहीं है और स्पष्ट रूप से यह अवांछित है। क्या इसे रोकने के लिए भी संभव है?

उत्तर

10

ठीक है, यह सोचते हैं कि यह केवल (रूपांतरण मुक्केबाजी मूल्य-प्रकारों के लिए है) वर्गों के साथ काम करने की जरूरत है, तो आप एक class बाधा जोड़ सकते हैं:

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : class, IActive 
{ 
    return x => x.Active; 
} 

। ..और रूपांतरण दूर चला जाता है।

+2

आह में एक प्रति त्रुटि है, दिलचस्प; मौलिक अंतर में "बाध्य" से "कॉलवर्ट" के बीच परिवर्तन होता है; यह दिलचस्प है कि यह इसे काम करने देता है –

2

इस प्रयास करें:

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : IActive 
{ 
    return x => x.Active; 
} 
+0

मुझे संदेह है कि quesiton –