2011-08-08 11 views
11

अंदर सी # अभिव्यक्ति का मूल्यांकन मैं एक और एक में एक अभिव्यक्ति का उपयोग करना चाहते:एक और अभिव्यक्ति

Expression<Func<double, double>> f = x => x * x * 27 + blah ... expression with x; 

Expression<Func<double, double>> g = y => 3 + 8 * f.Compile()(y) * y * blah... expression with y and f(y); 

यह जब LINQ के लिए भेजा SQL क्योंकि f.Compile() एसक्यूएल के लिए अज्ञात है काम नहीं करेगा।

आप f को y पर संकलित किए बिना अभिव्यक्ति का मूल्यांकन कैसे करते हैं, लेकिन अभी भी g को परिभाषित करने के लिए सामान्य वाक्यविन्यास का उपयोग कर रहे हैं?

मैं कुछ अपठनीय Expression.Add/Expression.Multiply आदि विवरणों के साथ g को सभी परिभाषित नहीं करना चाहता हूं।

धन्यवाद।

उत्तर

3

Calling functions in LINQ queries और LINQ Extensions प्रोजेक्ट पर एक नज़र डालें। CLinq भाग आपके प्रश्न के लिए अप्रासंगिक है, लेकिन इसमें LinqExt लाइब्रेरी भी शामिल है, जो आप ढूंढ रहे हैं। उसी दृष्टिकोण का उपयोग LinqKit द्वारा भी किया जाता है जो लिंक के लिए अन्य उपयोगी एक्सटेंशन भी प्रदान करता है।

+0

+1 बहुत ही रोचक लेख। –

+0

बहुत बहुत धन्यवाद, मैंने आपके द्वारा दिए गए लिंक से लिंककिट डाउनलोड किया है और यह 'Invoke' और' AsExpandable' के साथ पूरी तरह से काम करता है। मैं सहमत हूं, बहुत ही रोचक लेख। – SemMike

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