यह क्योंकि LINQ इतने सारे अलग अलग बातें है इस सवाल का जवाब देना मुश्किल है। उदाहरण के लिए, सी # के लिए चिपके हुए, निम्नलिखित बातें शामिल हैं:
- क्वेरी भाव जो तब सामान्य रूप से संकलित किया गया है "क्वेरी भाव के बिना सी #" "पूर्व संसाधित" में कर रहे हैं। Spec का क्वेरी अभिव्यक्ति भाग वास्तव में छोटा है - यह मूल रूप से एक यांत्रिक अनुवाद है जो क्वेरी के वास्तविक अर्थ के बारे में कुछ भी नहीं मानता है, "आदेश द्वारा ऑर्डरबी/फिरबी/आदि में अनुवाद किया गया है"।
- प्रतिनिधियों को निष्पादन योग्य कोड के रूप में एक विशेष हस्ताक्षर के साथ मनमानी कार्यों का प्रतिनिधित्व करने के लिए उपयोग किया जाता है।
- अभिव्यक्ति पेड़ एक ही बात का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, लेकिन के रूप में डेटा (जो जांच की जा सकती और अनुवाद एक अलग रूप है, उदा SQL में)
- लैम्ब्डा भाव या तो प्रतिनिधियों या अभिव्यक्ति पेड़ों में स्रोत कोड कन्वर्ट करने के लिए उपयोग किया जाता है।
- अधिकतर LINQ प्रदाताओं द्वारा विस्तार विधि विधियों का उपयोग स्थिर विधि कॉल को एक साथ करने के लिए किया जाता है। इससे प्रभावी रूप से बहुत अधिक शक्ति प्राप्त करने के लिए एक सरल इंटरफ़ेस (उदा।
IEnumerable<T>
) की अनुमति मिलती है।
- अनुमानों के लिए बेनामी प्रकारों का उपयोग किया जाता है - जहां आपके पास डेटा का कुछ अलग संग्रह होता है, और आप उस डेटा के प्रत्येक पहलू के बिट्स चाहते हैं, एक अनाम प्रकार आपको उन्हें एक साथ इकट्ठा करने की अनुमति देता है।
- लागू रूप से टाइप किए गए स्थानीय चर (
var
) प्राथमिक रूप से टाइप किए गए भाषा को बनाए रखने के लिए अज्ञात प्रकारों के साथ काम करते समय उपयोग किए जाते हैं, जहां आप स्पष्ट रूप से प्रकार के नाम को "बोलने" में सक्षम नहीं हो सकते हैं।
- इटरेटर ब्लॉक आमतौर पर इन-प्रोसेस पूछताछ को लागू करने के लिए उपयोग किए जाते हैं, उदा। LINQ से ऑब्जेक्ट्स के लिए।
- टाइप अनुमान का उपयोग पूरी चीज को बहुत आसान बनाने के लिए किया जाता है - LINQ में बहुत सी सामान्य तरीके हैं, और बिना किसी अनुमान के यह वास्तव में दर्दनाक होगा।
- कोड पीढ़ी कोड में एक मॉडल (dbml जैसे) मुड़ने के लिए प्रयोग किया जाता है
- आंशिक प्रकार तैयार किए गए कोड तानाना प्रदान करने के लिए उपयोग किया जाता है
- गुण
जाहिर है एक LINQ प्रदाताओं के लिए मेटाडाटा प्रदान करने के लिए उपयोग किया जाता है इनमें से बहुत सारे LINQ द्वारा उपयोग किए गए केवल नहीं हैं, लेकिन विभिन्न LINQ प्रौद्योगिकियां उन पर निर्भर करती हैं।
यदि आप रुचि रखने वाले पहलुओं के बारे में अधिक संकेत दे सकते हैं, तो हम अधिक जानकारी प्रदान करने में सक्षम हो सकते हैं।
यदि आप ऑब्जेक्ट्स को LINQ को प्रभावी ढंग से कार्यान्वित करने में रुचि रखते हैं, तो आपको कुछ हफ्ते पहले पढ़ाई में डीडीडी में दी गई एक बात में रूचि हो सकती है - मूल रूप से एक घंटे में जितना संभव हो सके LINQ से ऑब्जेक्ट्स को कार्यान्वित करना। हम इसके अंत तक बहुत दूर थे, लेकिन आपको दयालु का एक बहुत अच्छा विचार देना चाहिए जो आपको करने की ज़रूरत है (और बफरिंग/स्ट्रीमिंग, इटरेटर ब्लॉक, क्वेरी अभिव्यक्ति अनुवाद इत्यादि)। वीडियो अभी तक नहीं हैं (और मैंने अभी तक डाउनलोड के लिए कोड नहीं रखा है) लेकिन यदि आप रुचि रखते हैं, तो मुझे [email protected] पर एक मेल छोड़ दो और मैं आपको बता दूंगा कि वे कब उठ रहे हैं । (मैं शायद इसके बारे में भी ब्लॉग करूंगा।)
स्रोत
2008-12-02 07:19:00
क्या आपका मतलब अंतर्निहित वाक्यविन्यास/पेड़ों में क्वेरी का अनुवाद कैसे किया जाता है या निष्पादन अर्थ में LINQ फ़ंक्शन कैसे करता है? – JaredPar
पर मैं अधिकतर संकलन समय प्रणालियों के बारे में चिंतित हूं –