LINQ - अवलोकन

दुनिया भर के डेवलपर्स को परिभाषित पथ की कमी के कारण डेटा को क्वेरी करने में हमेशा समस्याओं का सामना करना पड़ता है और SQL, वेब सेवा, XQuery, आदि जैसी कई तकनीकों को मास्टर करने की आवश्यकता होती है।

विज़ुअल स्टूडियो 2008 में प्रस्तुत किया गया और एंडर्स हेजलबर्ग द्वारा डिजाइन किया गया, LINQ (भाषा एकीकृत क्वेरी) SQL, XML आदि क्वेरी भाषाओं के ज्ञान के बिना भी प्रश्न लिखने की अनुमति देता है। LINQ क्वेरी को विविध डेटा प्रकारों के लिए लिखा जा सकता है।

LINQ क्वेरी का उदाहरण

सी#

using System;
using System.Linq;

class Program {
   static void Main() {
   
      string[] words = {"hello", "wonderful", "LINQ", "beautiful", "world"};
		
      //Get only short words
      var shortWords = from word in words where word.Length <= 5 select word;
	    
      //Print each word out
      foreach (var word in shortWords) {
         Console.WriteLine(word);
      }	 
		
      Console.ReadLine();
   }
}

वीबी

Module Module1
   Sub Main()
      Dim words As String() = {"hello", "wonderful", "LINQ", "beautiful", "world"}
     
      ' Get only short words
      Dim shortWords = From word In words _ Where word.Length <= 5 _ Select word
     
      ' Print each word out.
	  
      For Each word In shortWords
         Console.WriteLine(word)
      Next
	  
      Console.ReadLine()
   End Sub
End Module

जब C # या VB के उपरोक्त कोड को संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

hello 
LINQ 
world

LINQ का सिंटेक्स

LINQ के दो सिंटेक्स हैं। ये निम्नलिखित हैं।

लैम्डा (विधि) सिंटेक्स

var longWords = words.Where( w ⇒ w.length > 10);
Dim longWords = words.Where(Function(w) w.length > 10)

क्वेरी (समझ) सिंटेक्स

var longwords = from w in words where w.length > 10;
Dim longwords = from w in words where w.length > 10

LINQ के प्रकार

LINQ के प्रकार संक्षेप में नीचे बताए गए हैं।

  • LINQ ऑब्जेक्ट्स के लिए
  • LINQ to XML (XLINQ)
  • LINQ to DataSet
  • LINQ to SQL (DLINQ)
  • LINQ संस्थाओं के लिए

उपरोक्त के अलावा, PLINQ नामक एक LINQ प्रकार भी है जो Microsoft के समानांतर LINQ है।

.NET में LINQ आर्किटेक्चर

LINQ में एक 3-लेयर्ड आर्किटेक्चर है जिसमें ऊपर की परत में भाषा एक्सटेंशन होते हैं और नीचे की परत में डेटा स्रोत होते हैं जो आमतौर पर IEnumerable <T> या IQueryable <T> जेनेरिक इंटरफेस को लागू करने वाली ऑब्जेक्ट होते हैं। वास्तुकला नीचे दिखाया गया है।

क्वेरी एक्सप्रेशंस

क्वेरी अभिव्यक्ति और कुछ नहीं बल्कि एक LINQ क्वेरी है, जिसे SQL ऑपरेटरों के साथ Select, Where और OrderBy जैसे SQL के समान रूप में व्यक्त किया गया है। क्वेरी अभिव्यक्तियाँ आमतौर पर "From" कीवर्ड से शुरू होती हैं।

मानक LINQ क्वेरी ऑपरेटरों तक पहुँचने के लिए, namespace System.Query को डिफ़ॉल्ट रूप से आयात किया जाना चाहिए। ये अभिव्यक्तियाँ एक घोषणात्मक क्वेरी सिंटैक्स के भीतर लिखी गई हैं जो C # 3.0 था।

नीचे एक संपूर्ण क्वेरी ऑपरेशन दिखाने के लिए एक उदाहरण है जिसमें डेटा स्रोत निर्माण, क्वेरी अभिव्यक्ति परिभाषा और क्वेरी निष्पादन शामिल हैं।

सी#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators {
   class LINQQueryExpressions {
      static void Main() {
      
         // Specify the data source.
         int[] scores = new int[] { 97, 92, 81, 60 };

         // Define the query expression.
         IEnumerable<int> scoreQuery = from score in scores where score > 80 select score;

         // Execute the query.
		 
         foreach (int i in scoreQuery) {
            Console.Write(i + " ");
         }
		 
         Console.ReadLine();
      }
   }
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

97 92 81

एक्सटेंशन के तरीके

.NET 3.5 के साथ प्रस्तुत किया गया है, एक्सटेंशन विधियों को केवल स्थिर कक्षाओं में घोषित किया गया है और किसी वर्ग के वास्तविक सदस्य के बिना वर्ग का विस्तार करने के लिए कुछ सटीक क्वेरी ऑपरेशन करने के लिए ऑब्जेक्ट में कस्टम विधियों को शामिल करने की अनुमति देता है। इन्हें ओवरलोड भी किया जा सकता है।

संक्षेप में, विस्तार विधियों का उपयोग क्वेरी अभिव्यक्तियों को पारंपरिक विधि कॉल (ऑब्जेक्ट-ओरिएंटेड) में अनुवाद करने के लिए किया जाता है।

LINQ और संग्रहित प्रक्रिया के बीच अंतर

LINQ और Stored प्रक्रियाओं के बीच अंतर का एक सरणी मौजूद है। इन अंतरों का उल्लेख नीचे किया गया है।

  • LINQ क्वेरी की तुलना में संग्रहीत कार्यविधियाँ बहुत तेज़ हैं क्योंकि वे एक अपेक्षित निष्पादन योजना का पालन करते हैं।

  • एक संग्रहीत कार्यविधि की तुलना में एक LINQ क्वेरी को निष्पादित करते समय रन-टाइम त्रुटियों से बचना आसान है क्योंकि पूर्व में Visual Studio के Intellisense समर्थन के साथ-साथ संकलन-समय के दौरान पूर्ण-प्रकार की जाँच है।

  • LINQ .NET डिबगर का उपयोग करके डीबगिंग की अनुमति देता है जो संग्रहीत कार्यविधियों के मामले में नहीं है।

  • LINQ संग्रहीत प्रक्रियाओं के विपरीत कई डेटाबेस के लिए समर्थन प्रदान करता है, जहां विभिन्न प्रकार के डेटाबेस के लिए कोड को फिर से लिखना आवश्यक है।

  • संग्रहीत प्रक्रियाओं के एक सेट की तैनाती की तुलना में LINQ आधारित समाधान की तैनाती आसान और सरल है।

LINQ के लिए चाहिए

LINQ से पहले C #, SQL, और विभिन्न API सीखना आवश्यक था जो दोनों को एक साथ बाँध कर एक पूर्ण अनुप्रयोग बनाते हैं। चूंकि, ये डेटा स्रोत और प्रोग्रामिंग भाषा एक बाधा बेमेल का सामना करते हैं; शॉर्ट कोडिंग की आवश्यकता महसूस की जाती है।

नीचे एक उदाहरण है कि LINQ के आगमन से पहले डेटा की क्वेरी करते समय डेवलपर्स द्वारा कितनी विविध तकनीकों का उपयोग किया गया था।

SqlConnection sqlConnection = new SqlConnection(connectString);
SqlConnection.Open();

System.Data.SqlClient.SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "Select * from Customer";
return sqlCommand.ExecuteReader (CommandBehavior.CloseConnection)

दिलचस्प है, फीचर्ड कोड लाइनों में से, क्वेरी केवल अंतिम दो द्वारा परिभाषित की जाती है। LINQ का उपयोग करते हुए, एक ही डेटा क्वेरी को पठनीय रंग-कोडित रूप में लिखा जा सकता है जैसे कि नीचे उल्लेखित एक बहुत कम समय में।

Northwind db = new Northwind(@"C:\Data\Northwnd.mdf");
var query = from c in db.Customers select c;

LINQ के फायदे

LINQ फायदे का एक मेजबान प्रदान करता है और उनमें से सबसे महत्वपूर्ण इसकी शक्तिशाली अभिव्यक्ति है जो डेवलपर्स को घोषित रूप से व्यक्त करने में सक्षम बनाता है। LINQ के कुछ अन्य फायदे नीचे दिए गए हैं।

  • LINQ सिंटैक्स हाइलाइटिंग प्रदान करता है जो डिज़ाइन समय के दौरान गलतियों का पता लगाने में मददगार साबित होता है।

  • LINQ IntelliSense प्रदान करता है जिसका अर्थ है कि अधिक सटीक प्रश्नों को आसानी से लिखना।

  • LINQ में कोड लिखना काफी तेज है और इस तरह विकास का समय भी काफी कम हो जाता है।

  • LINQ C # भाषा में अपने एकीकरण के कारण आसान डिबगिंग बनाता है।

  • दो तालिकाओं के बीच संबंध को देखना इसकी श्रेणीबद्ध विशेषता के कारण LINQ के साथ आसान है और यह कम समय में कई तालिकाओं में शामिल होने वाले प्रश्नों की रचना करने में सक्षम बनाता है।

  • LINQ कई विविध डेटा स्रोतों को क्वेरी करते हुए एक LINQ सिंटैक्स के उपयोग की अनुमति देता है और इसका मुख्य कारण इसकी एकात्मक नींव है।

  • LINQ एक्स्टेंसिबल है इसका मतलब है कि नए डेटा स्रोत प्रकारों को क्वेरी करने के लिए LINQ के ज्ञान का उपयोग करना संभव है।

  • LINQ कई डेटा स्रोतों को एक ही क्वेरी में शामिल करने की सुविधा प्रदान करता है और साथ ही जटिल समस्याओं को तोड़कर आसान प्रश्नों को डीबग करने के लिए सेट करता है।

  • LINQ SQL डेटा को XML डेटा में बदलने की तरह एक डेटा प्रकार के रूपांतरण के लिए LINQ आसान परिवर्तन प्रदान करता है।