एंटिटी फ्रेमवर्क - प्रोजेक्शन क्वेरी

LINQ संस्थाओं के लिए

LINQ to Entities को समझने के लिए सबसे महत्वपूर्ण अवधारणाओं में से एक यह है कि यह एक घोषित भाषा है। ध्यान इस बात पर केंद्रित है कि आपको जानकारी प्राप्त करने की आवश्यकता के बजाय किस जानकारी की आवश्यकता है।

  • इसका अर्थ है कि आप डेटा के साथ काम करने में अधिक समय बिता सकते हैं और डेटाबेस को एक्सेस करने जैसे कार्यों को करने के लिए आवश्यक अंतर्निहित कोड को जानने की कोशिश कर रहे हैं।

  • यह समझना महत्वपूर्ण है कि घोषित भाषाएं वास्तव में डेवलपर से कोई नियंत्रण नहीं हटाती हैं, लेकिन यह डेवलपर को ध्यान केंद्रित करने में मदद करती है कि महत्वपूर्ण क्या है।

LINQ से एंटिटीज आवश्यक कीवर्ड

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

अनु क्रमांक। कीवर्ड और विवरण
1

Ascending

निर्दिष्ट करता है कि किसी श्रेणी का कम से कम (या निम्नतम) तत्व किसी श्रेणी के उच्चतम तत्व तक होता है। यह सामान्य रूप से डिफ़ॉल्ट सेटिंग है। उदाहरण के लिए, जब एक अल्फ़ाबेटिक प्रकार का प्रदर्शन करते हैं, तो सॉर्ट ए से जेड तक की सीमा में होगा।

2

By

एक समूह को लागू करने के लिए उपयोग किए जाने वाले क्षेत्र या अभिव्यक्ति को निर्दिष्ट करता है। फ़ील्ड या अभिव्यक्ति समूहिंग कार्य करने के लिए उपयोग की जाने वाली कुंजी को परिभाषित करती है।

3

Descending

निर्दिष्ट करता है कि किसी श्रेणी का सबसे बड़ा (या उच्चतम) तत्व किसी श्रेणी के निम्नतम तत्व से होता है। उदाहरण के लिए, जब एक अल्फ़ाबेटिक सॉर्ट करते हैं, तो सॉर्ट ज़ेड से ए तक की सीमा में होगा।

4

Equals

प्राथमिक संदर्भ डेटा स्रोत को द्वितीयक संदर्भ डेटा स्रोत में शामिल करने के लिए एक सम्मिलित कथन के बाएँ और दाएँ खंड के बीच उपयोग किया जाता है। बराबर कीवर्ड के बाईं ओर का फ़ील्ड या अभिव्यक्ति प्राथमिक डेटा स्रोत को निर्दिष्ट करता है, जबकि बराबर कीवर्ड के दाईं ओर फ़ील्ड या अभिव्यक्ति द्वितीयक डेटा स्रोत को निर्दिष्ट करता है।

5

From

आवश्यक जानकारी प्राप्त करने के लिए उपयोग किए जाने वाले डेटा स्रोत को निर्दिष्ट करता है और एक रेंज चर को परिभाषित करता है। इस वैरिएबल का एक ही उद्देश्य है कि लूप में पुनरावृत्ति के लिए इस्तेमाल किया जाने वाला वैरिएबल।

6

Group

आपके द्वारा निर्दिष्ट प्रमुख मूल्य का उपयोग करके समूहों में आउटपुट को व्यवस्थित करता है। आउटपुट संगठन के कई स्तर बनाने के लिए कई समूह खंडों का उपयोग करें। समूह खंड का क्रम उस गहराई को निर्धारित करता है जिस पर समूहन क्रम में एक विशेष कुंजी मान दिखाई देता है। आप एक विशिष्ट संदर्भ बनाने के लिए इस कीवर्ड को साथ जोड़ते हैं।

7

In

कई तरीकों से उपयोग किया जाता है। इस स्थिति में, कीवर्ड एक क्वेरी के लिए उपयोग किए जाने वाले प्रासंगिक डेटाबेस स्रोत को निर्धारित करता है। जॉइन के साथ काम करते समय, कीवर्ड का उपयोग प्रत्येक संदर्भ डेटाबेस स्रोत में शामिल होने के लिए किया जाता है।

8

Into

एक पहचानकर्ता को निर्दिष्ट करता है जिसे आप LINQ क्वेरी क्लॉज़ जैसे कि ज्वाइन, ग्रुप, और सेलेक्ट के संदर्भ के रूप में उपयोग कर सकते हैं।

9

Join

दो संबंधित डेटा स्रोतों से एक एकल डेटा स्रोत बनाता है, जैसे कि मास्टर / डिटेल सेटअप। एक जुड़ाव एक आंतरिक, समूह या बाईं-बाहरी जुड़ाव को निर्दिष्ट कर सकता है, आंतरिक रूप से डिफ़ॉल्ट के रूप में शामिल होता है। आप msdn.microsoft.com पर जुड़ने के बारे में अधिक पढ़ सकते हैं

10

Let

एक रेंज वैरिएबल को परिभाषित करता है जिसका उपयोग आप सबप्रेशन के परिणामों को क्वेरी एक्सप्रेशन में स्टोर करने के लिए कर सकते हैं। आमतौर पर, रेंज वैरिएबल का उपयोग अतिरिक्त एनुमरेटेड आउटपुट प्रदान करने या क्वेरी की दक्षता को बढ़ाने के लिए किया जाता है (ताकि किसी विशेष कार्य, जैसे किसी स्ट्रिंग के लोअरकेस मान को खोजने के लिए, एक बार से अधिक की आवश्यकता न हो)।

1 1

On

फ़ील्ड या अभिव्यक्ति को निर्दिष्ट करता है जो किसी कार्य को कार्यान्वित करने के लिए उपयोग किया जाता है। क्षेत्र या अभिव्यक्ति एक ऐसे तत्व को परिभाषित करता है जो प्रासंगिक डेटा स्रोतों दोनों के लिए सामान्य है।

12

Orderby

क्वेरी के लिए एक क्रम बनाता है। आप सॉर्ट के क्रम को नियंत्रित करने के लिए आरोही या अवरोही कीवर्ड जोड़ सकते हैं। छँटाई के कई स्तरों को बनाने के लिए कई क्रमिक खंडों का उपयोग करें। ऑर्डरबी क्लॉज़ का क्रम उस क्रम को निर्धारित करता है जिसमें क्रमबद्ध अभिव्यक्तियों को संभाला जाता है, इसलिए एक अलग क्रम का उपयोग करने के परिणामस्वरूप अलग-अलग आउटपुट होंगे।

13

Where

परिभाषित करता है कि LINQ को डेटा स्रोत से क्या प्राप्त करना चाहिए। आप एक या एक से अधिक बूलियन अभिव्यक्तियों का उपयोग करते हैं जो कि पुनर्प्राप्त करने की बारीकियों को परिभाषित करते हैं। बूलियन अभिव्यक्तियों को && (और) और || का उपयोग करके एक दूसरे से अलग किया जाता है (या) ऑपरेटरों।

14

Select

LINQ क्वेरी से आउटपुट को निर्धारित करता है कि किस सूचना को वापस लौटाया जाए। यह कथन डेटा प्रकार के तत्वों को परिभाषित करता है जो LINQ पुनरावृत्ति प्रक्रिया के दौरान वापस आते हैं।

प्रक्षेपण

प्रोजेक्शन क्वेश्चन आपके डेटाबेस से केवल विशिष्ट फ़ील्ड्स को प्राप्त करके, आपके एप्लिकेशन की दक्षता में सुधार करते हैं।

  • आपके पास डेटा होने के बाद, आप आउटपुट से पहले डेटा को आकार देने के लिए आवश्यकतानुसार प्रोजेक्ट या फ़िल्टर करना चाह सकते हैं।

  • किसी भी LINQ से Entities अभिव्यक्ति का मुख्य कार्य डेटा प्राप्त करना और इसे आउटपुट के रूप में प्रदान करना है।

इस अध्याय का "विकासशील LINQ से लेकर एंटिटीज क्वेश्चन" खंड इस मूल कार्य को करने के लिए तकनीकों को प्रदर्शित करता है।

आइए निम्नलिखित कोड पर एक नज़र डालें, जिसमें छात्रों की सूची पुनः प्राप्त की जाएगी।

using (var context = new UniContextEntities()) {

   var studentList = from s in context.Students select s;

   foreach (var student in studentList) {
      string name = student.FirstMidName + " " + student.LastName;
      Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
   }
}

एकल वस्तु

किसी एकल छात्र ऑब्जेक्ट को प्राप्त करने के लिए आप फ़र्स्ट () या फ़र्स्टऑर्डडफ़ॉल्ट एन्यूमरेबल विधियों का उपयोग कर सकते हैं जो किसी अनुक्रम के पहले तत्व को लौटाता है। First और FirstOrDefault के बीच अंतर यह है कि First () एक अपवाद को फेंक देगा, अगर आपूर्ति किए गए मानदंड के लिए कोई परिणाम डेटा नहीं है जबकि FirstOrDefault () डिफ़ॉल्ट मान शून्य देता है, यदि कोई परिणाम डेटा नहीं है। नीचे दिए गए कोड स्निपेट में पहले छात्र को सूची से हटा दिया जाएगा, जिसका पहला नाम अली है।

using (var context = new UniContextEntities()) {

   var student = (from s in context.Students where s.FirstMidName 
      == "Ali" select s).FirstOrDefault<Student>();

   string name = student.FirstMidName + " " + student.LastName;
   Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}

आप सिंगल स्टूडेंट ऑब्जेक्ट को प्राप्त करने के लिए सिंगल () या सिंगलऑर्डेफ़ॉल्ट का भी उपयोग कर सकते हैं जो किसी अनुक्रम के एकल, विशिष्ट तत्व को लौटाता है। निम्नलिखित उदाहरण में, एक एकल छात्र को पुनर्प्राप्त किया जाता है जिसकी आईडी 2 है।

using (var context = new UniContextEntities()) {

   var student = (from s in context.Students where s.ID 
      == 2 select s).SingleOrDefault<Student>();
   string name = student.FirstMidName + " " + student.LastName;
	
   Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
   Console.ReadKey();
}

वस्तुओं की सूची

यदि आप उन छात्रों की सूची पुनः प्राप्त करना चाहते हैं, जिनका पहला नाम अली है तो आप ToList () उपयोग करने योग्य विधि का उपयोग कर सकते हैं।

using (var context = new UniContextEntities()) {

   var studentList = (from s in context.Students where s.FirstMidName 
      == "Ali" select s).ToList();

   foreach (var student in studentList) {
      string name = student.FirstMidName + " " + student.LastName;
      Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
   }

   Console.ReadKey();
}

गण

किसी विशेष क्रम में डेटा / सूची को पुनः प्राप्त करने के लिए आप ऑर्डरबी कीवर्ड का उपयोग कर सकते हैं। निम्नलिखित कोड में, छात्र की स्निपेट सूची आरोही क्रम में प्राप्त की जाएगी।

using (var context = new UniContextEntities()) {

   var studentList = (from s in context.Students orderby
      s.FirstMidName ascending select s).ToList();

   foreach (var student in studentList) {
      string name = student.FirstMidName + " " + student.LastName;
      Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
   }

   Console.ReadKey();
}

मानक बनाम प्रोजेक्शन एंटिटी फ्रेमवर्क क्वेरी

मान लीजिए, आपके पास एक छात्र मॉडल है जिसमें ID, FirstMidName, LastName और EnrollmentDate शामिल हैं। यदि आप छात्रों की सूची वापस करना चाहते हैं, तो सभी क्षेत्रों में एक मानक क्वेरी वापस आ जाएगी। लेकिन अगर आप केवल उन छात्रों की सूची प्राप्त करना चाहते हैं जिनमें ID, FirstMidName और LastName फ़ील्ड शामिल हैं। यह वह जगह है जहाँ आपको एक प्रक्षेपण क्वेरी का उपयोग करना चाहिए। निम्नलिखित प्रक्षेपण क्वेरी का सरल उदाहरण है।

using (var context = new UniContextEntities()) {

   var studentList = from s in context.Students
      orderby s.FirstMidName ascending
      where s.FirstMidName == "Ali"

   select new {s.ID, s.FirstMidName, s.LastName};

   foreach (var student in studentList) {
      string name = student.FirstMidName + " " + student.LastName;
      Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
   }

   Console.ReadKey();
}

ऊपर दिए गए प्रोजेक्शन क्वेरी को EnrolmentDate फ़ील्ड से बाहर रखा गया है। इससे आपका आवेदन बहुत जल्दी हो जाएगा।