c# - How to convert a String to its equivalent LINQ Expression Tree? -


यह मूल समस्या का सरलीकृत संस्करण है।

मेरे पास एक वर्ग नाम है:

  सार्वजनिक वर्ग व्यक्ति {सार्वजनिक स्ट्रिंग नाम {get; सेट; } सार्वजनिक int आयु {प्राप्त; सेट; } सार्वजनिक int वजन {प्राप्त करें; सेट; } सार्वजनिक तिथि समय पसंदीदा दिन {प्राप्त; सेट; }}  

... और उदाहरण देता है:

  var बॉब = नया व्यक्ति {नाम = "बॉब", आयु = 30, वजन = 213, पसंदीदा = "1/1/2000"}  

मैं अपने पसंदीदा पाठ संपादक में स्ट्रिंग के रूप में निम्नलिखित लिखना चाहूंगा .... < / P>

  (व्यक्ति.एज & gt; 3 और व्यक्ति। वीइट> 50) या व्यक्ति.एज & lt; 3  

मैं इस स्ट्रिंग और मेरे ऑब्जेक्ट के उदाहरण को लेना चाहता हूं और सही या गलत का मूल्यांकन करना चाहता हूं - अर्थात वस्तु उदाहरण पर फ़ंक्स & lt; person, bool> का मूल्यांकन करना।

> यहां मेरे वर्तमान विचार हैं:

  1. मूल तुलना और तार्किक ऑपरेटर का समर्थन करने के लिए एएनटीएलआर में एक बुनियादी व्याकरण को लागू करें। मैं Visual Basic प्राथमिकता और कुछ विशेषताओं की नकल के बारे में सोच रहा हूं:
  2. एटीएनएलआर को प्रदान की गई स्ट्रिंग से उपयुक्त एएसटी बनाएं।
  3. एएसटी चलें और गतिशील रूप से उपयोग करें

मेरा प्रश्न यह है कि मैंने इसे पूरी तरह से पछाड़ दिया है? किसी भी विकल्प?


संपादित करें: चुना समाधान

मैंने डायनेमिक लिंक लाइब्रेरी, विशेष रूप से LINQSamples में दिए गए डायनामिक क्वेरी क्लास का उपयोग करने का निर्णय लिया।

नीचे कोड:

  सिस्टम का उपयोग कर; System.Linq.Expressions का उपयोग कर; System.Linq.Dynamic का उपयोग कर; नाम स्थान अभिव्यक्ति पार्सर {वर्ग का कार्यक्रम {सार्वजनिक वर्ग व्यक्ति {सार्वजनिक स्ट्रिंग नाम {get; सेट; } सार्वजनिक int आयु {प्राप्त; सेट; } सार्वजनिक int वजन {प्राप्त करें; सेट; } सार्वजनिक तिथि समय पसंदीदा दिन {प्राप्त; सेट; }} स्थिर शून्य मुख्य () {const स्ट्रिंग exp = @ "(Person.Age & gt; 3 और व्यक्ति। वीइट> 50) या व्यक्ति.एज & lt; 3"; Var p = अभिव्यक्ति। पर्मेटर (टाइपफ (पर्सन), "पर्सन"); Var ई = डायनेमिकएक्सप्रेस। पैरासेलाम्बडा (नया [] {पी}, नल, एक्सपी); Var बॉब = नया व्यक्ति {नाम = "बॉब", आयु = 30, वजन = 213, पसंदीदा दिनांक = नया दिनांक समय (2000,1,1)}; Var परिणाम = ई। कॉम्पल ()। डायनेमिक इनवोक (बॉब); Console.WriteLine (परिणाम); Console.ReadKey (); }}}  

परिणाम प्रकार की प्रणाली है। बूलियन, और इस उदाहरण में TRUE है।

मार्क ग्रेवैल के लिए बहुत धन्यवाद।

क्या सहायता यहां होगी? विशेष रूप से, मैं एक जहां खंड के रूप में सोच रहा हूँ यदि आवश्यक हो, तो उसे कॉल करने के लिए एक सूची / एरे के अंदर डाल दें। जहां (स्ट्रिंग) पर! I.e।

  var लोग = नई सूची & lt; व्यक्ति & gt; { व्यक्ति }; इंट मैच = लोग। कहां (फ़िल्टर)। कोई भी ();  

यदि नहीं, तो एक पार्सर लिखना (हुड के नीचे अभिव्यक्ति का उपयोग करना) भारी टैक्सिंग नहीं है - मैंने एक समान लिखा है (हालांकि मुझे नहीं लगता है कि मेरे पास है स्रोत) मेरी ट्रेन में बस क्रिसमस से पहले यात्रा करना ...


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -