मैं कुछ कोड है कि System.Linq.Expressions
और Expression.Lambda<Func<>>.Compile()
आदि का उपयोग कर मैं बाद में उपयोग के लिए एक विधानसभा में उत्पन्न कार्यों को क्रमानुसार करने में सक्षम होना चाहते हैं विभिन्न Func<>
प्रतिनिधियों उत्पन्न करता है मिल गया है। अतीत में मैंने सिस्टम के साथ कुछ सामान किया है। रिफ्लेक्शन। स्वीकार करें लेकिन अब लिंक अभिव्यक्तियां मैं उस मार्ग को फिर से नहीं जाना चाहूंगा।मैं एक सिस्टम को कैसे हटा सकता हूं। Linq.Expression?
क्या नेमस्पेस से Emit
नामस्थान में एक संकलित अभिव्यक्ति या किसी प्रकार का पुल क्रमबद्ध करने के लिए कोई तंत्र है?
संपादित
संदर्भ के लिए कुछ पृष्ठभूमि: मैं एक प्रश्न इंजन पर काम कर रहा हूँ (ज्यादातर अपने ही उन्नति और आनंद के लिए)। एक SQL विवरण मैं पार्स करने के लिए है और यह एक लैम्ब्डा समारोह में बदलना और फिर बाद में (और दोहराया निष्पादन) के लिए डिस्क के लिए यह क्रमानुसार चाहेंगे देखते हुए।
छद्म कोड में मैं इस मुद्दे पर हूँ:
Func<IEnumerable<T>, IEnumerable<T1>> query = Query.Parse<T, T1>("Select field AS A, field1 AS B from T where T.field2 > 5");
(जहां क्षेत्र, फ़ील्ड 1 और field2प्रकार टी और एक और बी गुण हैं की संपत्ति हैं प्रकार T1 के। और मैं <T>
करने के किसी भी शुमार पारित कर सकते हैंऔर वापस पाने और जो क्वेरी मापदंड से मेल खाने <T1>
के गणन।
तो मैं एक पहले से ही संकलित विधानसभा के रूप में डिस्क पर query
क्रमानुसार करने तो एक बाद की तारीख में मैं पार्स करने और यह संकलन के बिना यह <T>
के विभिन्न सेट लोड और मूल्यांकन कर सकते हैं करना चाहते हैं। मैं की तर्ज पर कुछ चित्र कर रहा हूँ:
AssemblyBuilder builder = new AssemblyBuilder(...);
ModuleBuilder module = builder.DefineDynamicModule(...);
TypeBuilder type = module.DefineType(...);
type.AddMethod(query); // <--- where this piece does not exist as far as I know
builder.Emit(...)
मुझे लगता है कि मैं देख रहा हूं कि आप क्या प्राप्त कर रहे हैं लेकिन यदि आप मेरा संपादन देखते हैं: मुझे नहीं पता कि अभिव्यक्ति इनपुट के रनटाइम मूल्यांकन तक कैसा दिखाई देगी। – dkackman