मैं निम्नलिखित बयान से मेल करने के अभिव्यक्ति के पेड़ का उपयोग कर एक गतिशील क्वेरी बनाने के प्रयास कर रहा हूँ:गतिशील प्रश्नों और अभिव्यक्ति पेड़ों के लिए विधि का चयन करें का उपयोग करना
var items = data.Where(i => i.CoverageType == 2).Select(i => i.LimitSelected);
मैं कहाँ विधि बनाने और इसे से एक परिणाम प्राप्त कर सकते हैं; हालांकि, मैं चयन विधि नहीं बना सकता।
यहाँ मेरी जहां विधि है:
:No generic method 'Select' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
var selectParm = Expression.Property(parm, "LimitSelected");
var selectMethod = Expression.Call(
typeof(Enumerable),
"Select",
new Type[]{typeof(BaseClassData), typeof(decimal)},
whereMethod,
Expression.Lambda<Func<BaseClassData, decimal>>(selectParm, new ParameterExpression[]{ parm})
);
जब मैं कोड को चलाने मैं इस त्रुटि मिलती है:
var parm = Expression.Parameter(typeof(BaseClassData), "baseCoverage");
var queryData = data.AsQueryable();
var left = Expression.Property(parm, "CoverageType");
var right = Expression.Constant(2m);
var e1 = Expression.Equal(left, right);
var whereMethod = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { queryData.ElementType },
queryData.Expression,
Expression.Lambda<Func<BaseClassData, bool>>(e1, new ParameterExpression[] { parm }));
यह है कि मैं क्या चयन विधि के लिए उपयोग कर रहा हूँ है
मैंने क्वेरी करने योग्य के लिए गणना करने की भी कोशिश की है और मुझे एक ही त्रुटि मिलती है।
'Select' और' Where' ले ** दो ** सामान्य पैरामीटर: मैं एक स्थिर तरीका है जिसके मुझे गतिशील क्वेरी उत्पन्न करने में मदद बनाने के लिए है। – SLaks
क्या आप ParameterExpression सरणी में मतलब है? मैं पूछता हूं क्योंकि कथन कोड कोड के रूप में ठीक काम करता है। अगर मैं केवल विधि का उपयोग कर क्वेरी बना देता हूं, तो सब कुछ ठीक काम करता है। यह तब होता है जब मैं अभिव्यक्ति वृक्ष में चुनिंदा विधि जोड़ने का प्रयास करता हूं। – MarkSalow
मैंने selectMethod के प्रकार सरणी में टाइपऑफ (बेस क्लासडाटा) जोड़ा और यह काम करता है। – MarkSalow