LINQ क्या है? मुझे पता है कि यह डेटाबेस के लिए है, लेकिन यह क्या करता है?
LINQ क्या है? मुझे पता है कि यह डेटाबेस के लिए है, लेकिन यह क्या करता है?
जवाबों:
LINQ का मतलब है लैंग्वेज इंटीग्रेटेड क्वेरी ।
YAQL (फिर भी एक और क्वेरी भाषा) लिखने के बजाय, Microsoft भाषा डेवलपर्स ने अपनी भाषाओं में सीधे प्रश्नों को व्यक्त करने का एक तरीका प्रदान किया (जैसे कि C # और Visual Basic)। इन प्रश्नों को बनाने की तकनीक इस बात पर निर्भर नहीं करती है कि किस चीज़ के कार्यान्वयन के विवरण पर ध्यान दिया जाए, ताकि आप कई लक्ष्यों (डेटाबेस, इन-मेमोरी ऑब्जेक्ट्स, एक्सएमएल) के विरुद्ध वैध क्वेरी लिख सकें, जिसमें व्यावहारिक रूप से अंतर्निहित तरीके का कोई विचार नहीं है। क्वेरी निष्पादित की जाएगी।
आइए इस अन्वेषण को .NET फ्रेमवर्क (3.5) से संबंधित भागों के साथ शुरू करें।
LINQ to Objects - क्वेरी मेथड्स के लिए System.Linq.Enumerable की जांच करें । ये टारगेट IEnumerable<T>
, किसी भी टाइप किए गए लूपेबल कलेक्शन को टाइप-सेफ तरीके से क्वेर करने की अनुमति देते हैं। ये प्रश्न संकलित .NET विधियों पर निर्भर करते हैं, अभिव्यक्तियों पर नहीं।
कुछ भी करने के लिए LINQ - कुछ क्वेरी विधियों के लिए System.Linq.Queryable की जांच करें । ये लक्ष्य IQueryable<T>
, अभिव्यक्ति पेड़ों के निर्माण की अनुमति देते हैं जिन्हें अंतर्निहित कार्यान्वयन द्वारा अनुवादित किया जा सकता है।
अभिव्यक्ति पेड़ - System.Linq.Expressions नामस्थान की जाँच करें । यह डेटा के रूप में कोड है। व्यवहार में, आपको इस सामान के बारे में पता होना चाहिए, लेकिन वास्तव में इन प्रकारों के खिलाफ कोड लिखने की आवश्यकता नहीं है। भाषा सुविधाएँ (जैसे लंबोदर भाव) आपको सीधे इन प्रकारों से निपटने से बचने के लिए विभिन्न लघु-हाथों का उपयोग करने की अनुमति दे सकती हैं।
LINQ to SQL - System.Data.Linq नाम स्थान की जाँच करें । विशेष रूप से ध्यान दें DataContext
। यह C # टीम द्वारा निर्मित एक DataAccess तकनीक है। यह सिर्फ काम करता है।
LINQ To Entities - System.Data.Objects नेमस्पेस की जांच करें । विशेष रूप से ध्यान दें ObjectContext
। यह ADO.NET टीम द्वारा निर्मित एक DataAccess तकनीक है। यह LINQ To SQL की तुलना में जटिल, शक्तिशाली और उपयोग करने में कठिन है।
LINQ to XML - System.Xml.Linq नाम स्थान की जाँच करें । अनिवार्य रूप से, लोग सामान से संतुष्ट नहीं थे System.Xml
। इसलिए Microsoft ने इसे फिर से लिखा और कुछ तरीकों को पेश करने के लिए री-राइट का लाभ उठाया जिससे कि XML के खिलाफ LINQ To ऑब्जेक्ट्स का उपयोग करना आसान हो गया।
कुछ अच्छे सहायक प्रकार, जैसे कि फंक और एक्शन । ये प्रकार सामान्य समर्थन के साथ प्रतिनिधि हैं। गया अपने स्वयं के रिवाज (और अन-विनिमेय) प्रतिनिधि प्रकार की घोषणा करने के दिन हैं।
उपरोक्त सभी .NET फ्रेमवर्क का हिस्सा है, और किसी भी .NET भाषा (VB.NET, C #, IronPython, COBOL .NET आदि) से उपलब्ध है।
ठीक है, भाषा सुविधाओं पर। मैं C # से चिपका रहूंगा, क्योंकि मैं वही जानता हूं जो मुझे सबसे अच्छा लगता है। VB.NET में भी इसी तरह के कई सुधार हुए (और एक जोड़ी जिसे C # नहीं मिला - XML शाब्दिक)। यह एक छोटी और अधूरी सूची है।
एक्सटेंशन मेथड्स - यह आपको टाइप करने के लिए एक विधि "जोड़ने" की अनुमति देता है। विधि वास्तव में एक स्थिर विधि है जो कि प्रकार का एक उदाहरण है, और प्रकार के सार्वजनिक अनुबंध तक सीमित है, लेकिन यह उन तरीकों को जोड़ने के लिए बहुत उपयोगी है जिन्हें आप नियंत्रित नहीं करते हैं (स्ट्रिंग), या जोड़ना (पूरी तरह से लागू किया गया) ) इंटरफेस के लिए सहायक तरीके।
Query Comprehension सिंटैक्स - यह आपको SQL जैसी संरचना में लिखने की अनुमति देता है। यह सब सामान System.Linq.Queryable या System.Linq.Enumerable (myCustomers के प्रकार के आधार पर) के तरीकों पर अनुवादित हो जाता है। यह पूरी तरह से वैकल्पिक है और आप इसके बिना LINQ का अच्छी तरह से उपयोग कर सकते हैं। क्वेरी घोषणा की इस शैली का एक लाभ यह है कि रेंज चर को स्कोप किया जाता है: उन्हें किसी भी खंड के लिए फिर से घोषित करने की आवश्यकता नहीं होती है।
IEnumerable<string> result =
from c in myCustomers
where c.Name.StartsWith("B")
select c.Name;
लैम्ब्डा एक्सप्रेशंस - यह एक विधि को निर्दिष्ट करने के लिए एक शॉर्टहैंड है। सी # संकलक प्रत्येक को एक अनाम विधि या एक सच्चे में अनुवाद करेगा System.Linq.Expressions.Expression
। Linq को अच्छी तरह से उपयोग करने के लिए आपको वास्तव में इनको समझने की आवश्यकता है। तीन भाग हैं: एक पैरामीटर सूची, एक तीर और एक विधि निकाय।
IEnumerable<string> result = myCustomers
.Where(c => c.Name.StartsWith("B"))
.Select(c => c.Name);`
बेनामी प्रकार - कभी-कभी कंपाइलर के पास आपके लिए एक प्रकार बनाने के लिए पर्याप्त जानकारी होती है। ये प्रकार वास्तव में गुमनाम नहीं हैं: संकलक उन्हें नाम देता है जब यह उन्हें बनाता है। लेकिन उन नामों को संकलन समय पर बनाया जाता है, जो किसी डेवलपर को डिज़ाइन समय में उस नाम का उपयोग करने के लिए बहुत देर हो चुकी होती है।
myCustomers.Select(c => new
{
Name = c.Name;
Age = c.Age;
})
निहित प्रकार - कभी-कभी कंपाइलर को एक इनिशियलाइज़ेशन से पर्याप्त जानकारी होती है कि वह आपके लिए टाइप का पता लगा सके। आप ऐसा करने के लिए कंपाइलर को निर्देश दे सकते हैं कि वह var कीवर्ड का उपयोग करें। बेनामी टाइप्स के लिए वेरिएबल घोषित करने के लिए इम्प्लिक्ट टाइपिंग की आवश्यकता होती है, क्योंकि प्रोग्रामर किसी गुमनाम टाइप के नाम का इस्तेमाल नहीं कर सकते हैं ।
// The compiler will determine that names is an IEnumerable<string>
var names = myCustomers.Select(c => c.Name);
LINQ (भाषा सम्मिलित क्वेरी)
संग्रह और पुनरावृत्ति हेरफेर के लिए एक पुस्तकालय जो तर्कों के रूप में उच्च-क्रम के कार्यों का व्यापक उपयोग करता है (System.Linq)
सार सिंटैक्स ट्री (System.Linq.Expressions) के रूप में सरल कार्यों के पारित होने और हेरफेर के लिए एक पुस्तकालय
विभिन्न भाषाओं के लिए सिंटैक्स विस्तार, प्रसंस्करण संग्रहों के लिए अधिक एसक्यूएल-जैसे सिंटैक्स प्रदान करने के लिए, अनाम फ़ंक्शंस के लिए अधिक कॉम्पैक्ट संकेतन, और अंतिम सदस्य फ़ंक्शंस से सिंटैक्टिक रूप से अप्रभेद्य कार्यों को पेश करने के लिए एक तंत्र
एक इंटरफ़ेस परिभाषा जिसके लिए डेटा प्रदाता क्वेरी संरचना प्राप्त करने के लिए अनुरूप हो सकते हैं और संभावित रूप से अनुकूलन कर सकते हैं, या कभी-कभी स्वयं संगत डेटा प्रदाता
घटकों को अलगाव या संयुक्त में उपयोग किया जा सकता है।
संक्षेप में, LINQ (भाषा-एकीकृत क्वेरी) आपको अपने कोड में सीधे प्रश्न लिखने की अनुमति देता है। वे क्वेरीज़ रिलेशनल डेटाबेस पर हो सकती हैं, लेकिन एक्सएमएल या इन-मेमोरी कंटेनर ऑब्जेक्ट्स पर, जैसे कि सरणियाँ और सूचियाँ। अधिक जानकारी MSDN लाइब्रेरी में उपलब्ध है: http://msdn.microsoft.com/en-us/library/bb308959.aspx
मैं एक सरल उत्तर के लिए प्रयास करने जा रहा हूं: LINQ आपके लिए अपने डेटाबेस (या अन्य डेटास्टोर, XML आदि) को क्वेरी भाषा का उपयोग करके एक तरह से SQL के समान है, लेकिन इसे एक .NET अनुप्रयोग के अंदर संकलित किया जा सकता है।
From Where Select, etc.
- यानी इसे इस तरह से लिखा जाना चाहिए कि परिणाम सेट वास्तव में बनता है
LINQ का अर्थ है भाषा एकीकृत क्वेरी , और CLR में एक सामान्य उद्देश्य "क्वेरी" तंत्र प्रदान करने का एक तरीका है।
यह सबसे बुनियादी स्तर पर है, इसमें IEnumerable <T> - जैसे।, सेलेक्ट, सम, कहां - पर प्रतिबंधों, अनुमानों आदि के लिए उपयोग किया जा सकता है। [1]
इसे थोड़ा और आगे ले जाने के लिए, LINQ एक नया LINQ प्रदाता मॉडल भी परिभाषित करता है जो एक अभिव्यक्ति ट्री ले सकता है और इसका उपयोग CLR के बाहर एक डेटा स्रोत के खिलाफ "देशी" प्रश्नों को चलाने के लिए करता है - जैसे।, LINQ to SQL, LINQ to XML, LINQ। एनबीबरनेट, आदि के लिए
C # और VB.NET ने एक क्वेरी सिंटैक्स को भी परिभाषित किया है जो आपको दृढ़ता से टाइप किए गए क्वेरी इनलाइन (जो SQL के समान दिखता है) को लिखने की अनुमति देता है, जो संकलक तब बराबर IEnumerable <T> कॉल में अनुवाद करता है।
मेरे लिए, LINQ के बारे में सबसे दिलचस्प बात यह है कि C # और VB.NET की सभी विशेषताएं हैं जिनका समर्थन करने की आवश्यकता थी, यह अपने आप में उपयोगी हैं। LINQ का समर्थन करने के लिए एक्सटेंशन मेथड, अनाम प्रकार, लैम्ब्डा एक्सप्रेशन और निहित टाइपिंग सभी आवश्यक थे - लेकिन हम एक शुद्ध LINQ संदर्भ के बाहर उन सुविधाओं का उपयोग करते हैं।
[१] वे संबंधपरक शब्द हैं, कार्यात्मक प्रोग्रामर शायद मैप, रिड्यूस, फोल्ड आदि पसंद करेंगे।
LINQ C # प्रोग्रामिंग भाषा से प्राप्त एक मुहावरे का उपयोग करके डेटा निकालने की एक तकनीक है। हालांकि यह SQL के लिए कार्यात्मक डिजाइन में बहुत अधिक बकाया है, यह मूल रूप से अपनी डेटा क्वेरी भाषा है। यह डेटा स्रोतों (एसक्यूएल डेटाबेस, इन-मेमोरी प्रतिनिधित्व, एक्सएमएल, आदि) के व्यापक स्पेक्ट्रम में संचालित होता है। LINQ-To-SQL, विशेष रूप से, एम्बेडेड SQL के पारंपरिक उपयोग के विपरीत के रूप में देखा जाना चाहिए, जो अक्सर SQL प्रोग्रामिंग और C # / VB प्रोग्रामिंग के बीच "प्रतिबाधा बेमेल" के रूप में संदर्भित होता है।
LINQ और उसकी सीमाओं की चर्चा के लिए, आप इस संबंधित प्रश्न पर एक नज़र रखना चाहते हैं: क्या LINQ SQL को बिंदु याद नहीं है?
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
"LINQ प्रोजेक्ट .NET फ्रेमवर्क में एक्सटेंशन के एक सेट का कोडनेम है जो भाषा-एकीकृत क्वेरी, सेट और ट्रांसफॉर्म ऑपरेशंस को सम्मिलित करता है। यह C # और विजुअल बेसिक को प्रश्नों के लिए मूल भाषा सिंटैक्स के साथ विस्तारित करता है और लाभ उठाने के लिए क्लास लाइब्रेरी प्रदान करता है। इन क्षमताओं। "