C# अकादमी · पाठ

LINQ प्रदाताओं में एक्सप्रेशन ट्री

देखें कि प्रदाता एक्सप्रेशन को क्वेरी में कैसे बदलते हैं।

पाठ 4, कुल 4 में से13 चरण

LINQ प्रदाताओं में एक्सप्रेशन ट्री, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

LINQ को अभिव्यक्ति ट्री की आवश्यकता क्यों है

LINQ के दो रूप हैं। IEnumerable<T> लैम्ब्डा को मेमोरी में चलाता है। IQueryable<T> उन्हें अभिव्यक्ति ट्री के रूप में प्राप्त करता है, ताकि कोई प्रदाता उन्हें SQL जैसी दूसरी भाषा में बदल सके।

मेमोरी-आधारित क्रम बनाम क्वेरी-योग्य क्रम

अंतर पैरामीटर प्रकार में है: IEnumerable.Where Func<T,bool> (संकलित) लेता है, जबकि IQueryable.Where Expression<Func<T,bool>> (एक ट्री) लेता है।

using System;
using System.Linq;
using System.Linq.Expressions;

int[] nums = { 1, 2, 3, 4 };
// IEnumerable path: lambda is a compiled delegate
var evens = nums.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(",", evens)); // 2,4

क्वेरी डेटा के रूप में बनी रहती है

IQueryable के साथ आपकी लैम्ब्डा अभिव्यक्ति ट्री के रूप में कैप्चर की जाती है और अभी चलाई नहीं जाती। प्रदाता क्वेरी बनाने के लिए ट्री का निरीक्षण करता है।

using System;
using System.Linq;
using System.Linq.Expressions;

IQueryable<int> q = new[] { 1, 2, 3, 4, 5 }.AsQueryable();
var filtered = q.Where(n => n > 2);
Console.WriteLine(filtered.Expression.NodeType); // Call (a method-call tree)

क्वेरी अभिव्यक्ति का निरीक्षण

क्वेरी-योग्य ऑब्जेक्ट का Expression गुणधर्म उस ट्री को उपलब्ध कराता है, जिसका प्रदाता अनुवाद करेगा।

using System;
using System.Linq;

var q = new[] { 10, 20, 30 }.AsQueryable().Where(x => x >= 20);
Console.WriteLine(q.Expression.ToString().Contains("Where")); // True

अनुवाद, निष्पादन नहीं

Entity Framework जैसा प्रदाता ट्री को पढ़ता है और WHERE Age > 18 जैसा SQL बनाता है। आपका C# विधेय क्लाइंट पर कभी नहीं चलता; काम डेटाबेस करता है।

क्वेरी प्रदाता की भूमिका

IQueryable में एक IQueryProvider होता है। जब आप क्वेरी के सभी परिणाम पढ़ते हैं, तो प्रदाता अभिव्यक्ति ट्री प्राप्त करता है और तय करता है कि उसे कैसे चलाना है।

using System;
using System.Linq;

var q = new[] { 1, 2, 3 }.AsQueryable();
Console.WriteLine(q.Provider.GetType().Name); // EnumerableQuery (the in-memory provider)

विलंबित निष्पादन

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

using System;
using System.Linq;

var q = new[] { 1, 2, 3, 4 }.AsQueryable()
    .Where(n => n > 1)
    .Select(n => n * 10);
// nothing has run yet; now force it:
Console.WriteLine(string.Join(",", q.ToList())); // 20,30,40

क्वेरी की रचना

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

using System;
using System.Linq;

var baseQuery = new[] { 5, 15, 25, 35 }.AsQueryable();
var q = baseQuery.Where(n => n > 10);
q = q.Where(n => n < 30); // composed: 10 < n < 30
Console.WriteLine(string.Join(",", q.ToList())); // 15,25

क्या अनुवादित नहीं किया जा सकता

प्रदाता केवल उन्हीं संचालनों का अनुवाद कर सकते हैं जिन्हें वे समझते हैं। किसी मनमानी C# विधि को कॉल करने वाला विधेय निष्पादन के समय अपवाद उत्पन्न कर सकता है, क्योंकि उसका कोई SQL समकक्ष नहीं है।

अपना प्रदाता लिखना

कस्टम प्रदाता IQueryProvider को लागू करते हैं और ट्री को पढ़ने तथा हर नोड को अपनी लक्ष्य क्वेरी भाषा में बदलने के लिए ExpressionVisitor का उपयोग करते हैं।

सबको एक साथ समझना

यह मुख्य बात दिखाता है: वही लैम्ब्डा IEnumerable के लिए डेलीगेट, लेकिन IQueryable के लिए ट्री होती है, जिससे अनुवाद संभव होता है।

using System;
using System.Linq;
using System.Linq.Expressions;

Expression<Func<int, bool>> predicate = n => n > 2;
var data = new[] { 1, 2, 3, 4 };
// IEnumerable needs a delegate:
Console.WriteLine(string.Join(",", data.Where(predicate.Compile()))); // 3,4
// IQueryable accepts the tree directly:
Console.WriteLine(string.Join(",", data.AsQueryable().Where(predicate))); // 3,4

त्वरित जाँच

जाँचें कि LINQ प्रदाताओं में अभिव्यक्ति ट्री की क्या भूमिका होती है।

पुनरावलोकन

आपने सीखा कि LINQ प्रदाता अभिव्यक्ति ट्री का उपयोग कैसे करते हैं।

  • IEnumerable संकलित Func का उपयोग करता है; IQueryable Expression<Func> ट्री का उपयोग करता है।
  • प्रदाता ट्री को चलाने के बजाय उसका अनुवाद करते हैं (जैसे SQL में)।
  • निष्पादन तब तक स्थगित रहता है जब तक परिणामों पर क्रम से चला न जाए।
  • केवल अनुवाद योग्य संचालन काम करते हैं; मनमानी विधियाँ विफल हो सकती हैं।
शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “LINQ प्रदाताओं में एक्सप्रेशन ट्री” पाठ निःशुल्क है?

हाँ—“LINQ प्रदाताओं में एक्सप्रेशन ट्री” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“LINQ प्रदाताओं में एक्सप्रेशन ट्री” में मैं क्या सीखूँगा?

देखें कि प्रदाता एक्सप्रेशन को क्वेरी में कैसे बदलते हैं। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“LINQ प्रदाताओं में एक्सप्रेशन ट्री” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. एक्सप्रेशन ट्री क्या हैं
  2. मैन्युअल रूप से एक्सप्रेशन बनाना
  3. एक्सप्रेशन कंपाइल और निष्पादित करना
  4. LINQ प्रदाताओं में एक्सप्रेशन ट्री
← C# अकादमी पर वापस जाएँ