linq-to-sql - LINQ के बारे में सीखना




linq-to-entities linq-to-objects (9)

मेरे 2 सेंट, अध्याय पढ़ें "11 क्वेरी एक्सप्रेशन और ऑब्जेक्ट्स के लिए LINQ" और "सी # इन गहराई" पुस्तक में "संग्रह से परे 12 LINQ" पुस्तक को समझने के लिए कि LINQ कैसे काम करता है।

अवलोकन

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

मुझे यह भी उम्मीद है कि यह LINQ के बारे में जानना चाहते हैं अन्य लोगों के लिए एक उपयोगी संसाधन साबित होगा।

LINQ क्या है?

LINQ :

LINQ प्रोजेक्ट .NET Framework में एक्सटेंशन के सेट के लिए एक कोडनाम है जिसमें भाषा-एकीकृत क्वेरी, सेट और ट्रांसफ़ॉर्मेशन को शामिल किया गया है। यह प्रश्नों के लिए मूल भाषा वाक्यविन्यास के साथ सी # और विजुअल बेसिक का विस्तार करता है और इन क्षमताओं का लाभ उठाने के लिए कक्षा पुस्तकालय प्रदान करता है।

इसका अर्थ यह है कि LINQ एक सामान्य वाक्यविन्यास का उपयोग करके विभिन्न प्रकार के डेटा स्रोतों से पूछने का एक मानक तरीका प्रदान करता है।

LINQ के क्या स्वाद हैं?

वर्तमान में माइक्रोसॉफ्ट द्वारा प्रदान किए गए कुछ अलग LINQ प्रदाता हैं:

यहां कुछ अन्य हैं, जिनमें से कई here सूचीबद्ध here

क्या लाभ हैं?

  • एकाधिक डेटा स्रोतों को क्वेरी करने का मानकीकृत तरीका
  • प्रश्नों की समय सुरक्षा संकलित करें
  • स्मृति वस्तुओं में सेट आधारित संचालन करने के लिए अनुकूलित तरीका
  • प्रश्नों को डीबग करने की क्षमता

तो मैं LINQ के साथ क्या कर सकता हूँ?

Chook सीएसवी फाइलों को आउटपुट करने का एक तरीका प्रदान करता है
Jeff दिखाता है कि सरणी से डुप्लिकेट को कैसे हटाया जाए
बॉब को एक डाटाटेबल से एक अलग आदेशित सूची मिलती है
Marxidad एक सरणी को सॉर्ट करने का तरीका दिखाता है
डाना को लिंक का उपयोग करके त्वरित सॉर्ट को लागू करने में मदद मिलती है

कहा से शुरुवात करे?

गेटकिल्लर के प्रश्न से लिंक का सारांश नीचे दिया गया है :
स्कॉट गुथरी अपने ब्लॉग पर लिंक के लिए एक परिचय प्रदान करता है
एमएसडीएन पर LINQ का एक सिंहावलोकन

ChrisAnnODell सुझाव देता है:

LINQ का उपयोग करने के लिए मुझे क्या चाहिए?

लिंक वर्तमान में वीबी.Net 9.0 और सी # 3.0 में उपलब्ध है, इसलिए आपको पूर्ण लाभ प्राप्त करने के लिए विजुअल स्टूडियो 2008 या इससे अधिक की आवश्यकता होगी। (आप हमेशा नोटपैड में अपना कोड लिख सकते हैं और MSBuild का उपयोग करके संकलित कर सकते हैं)

LinqBridge नामक एक उपकरण भी है जो आपको सी # 2.0 में प्रश्नों की तरह लिंक को चलाने की अनुमति देगा।

LINQ का उपयोग कर युक्तियाँ और चालें

LINQ का उपयोग करने के लिए इस प्रश्न में कुछ मुश्किल तरीके हैं


कुछ LINQ युक्तियाँ:

  • क्वेरी प्रदर्शन में सुधार करने के लिए शामिल होने से पहले फ़िल्टर लागू करें
  • वस्तु संदर्भ तुलना का उपयोग कर LINQ क्वेरी फ़िल्टर करें
  • LINQ से SQL क्वेरी में खाली संग्रह में योग लागू करें
  • LINQ से SQL में एक संपत्ति लोड करने में देरी
  • उत्सुक लोडिंग के साथ तालिका-मूल्यवान कार्यों का उपयोग करें
  • LINQ से ऑब्जेक्ट क्वेरी में सही क्रम में जुड़ें
  • एक लूप के अंदर एक LINQ क्वेरी लिखें

http://www.aspnetpro.com/articles/2009/04/asp200904zh_f/asp200904zh_f.asp



लिंक लिंक इन एक्शन प्राप्त करें यह एक कोडिंग पुस्तक के लिए एक आसान पठन है और वास्तव में आपको लिनक और .NET 3.5 की नई विशेषताओं को भाषा के लिए रखे गए कुछ अच्छे हिस्सों का उपयोग करने का तरीका सिखाता है।


यहां 101 लिंक नमूने हैं जो एक महान संदर्भ हैं यदि आप बस एक त्वरित वाक्य रचनात्मक उदाहरण चाहते हैं।

चलो LinqPad भी मत भूलना :)


लिंक अभ्यास के लिए

यदि आप अभ्यास और उत्तरों के साथ LINQ पर कुछ अभ्यास चाहते हैं, तो वास्तव में स्थापित करना आसान है और, मेरी राय में, कमाल:

https://github.com/walkhard/linq-exercises

विजुअल स्टूडियो में खुले गिट से डाउनलोड करें। आपका काम परीक्षण पास करना है।

[प्रकटीकरण: मैंने इससे कुछ लिनक्स सीखा और मैं इस परियोजना में योगदान देता हूं इसलिए हाँ मुझे लगता है कि यह सीखने का एक शानदार, तेज़ और कुशल तरीका है।]



मुझे लगता है, "LINQ के क्या स्वाद हैं" का जवाब? अधूरा है सबसे पहले, आप अपना खुद का "स्वाद" बना सकते हैं। हां, यह एक उन्नत कार्य है, लेकिन अब कई अलग-अलग LINQ कार्यान्वयन हैं।

चार्ली कैल्वर्ट के ब्लॉग पर मौजूदा LINQ प्रदाताओं (साथ ही LINQ सीखने पर कुछ और संसाधन) की सूची यहां दी गई है: LINQ से लिंक

और मैट वॉरेन द्वारा अपने स्वयं के LINQ प्रदाता बनाने के तरीके पर ब्लॉग पोस्ट की एक उत्कृष्ट श्रृंखला भी है: LINQ: एक IQueryable प्रदाता श्रृंखला बनाना


सबसे पहले, यदि आप एक नई परियोजना शुरू कर रहे हैं, तो एंटीटी फ्रेमवर्क ("ईएफ") के साथ जाएं - अब यह बहुत बेहतर एसक्यूएल उत्पन्न करता है (जैसे कि लिंक से एसक्यूएल करता है) और लिंकक से एसक्यूएल (" L2S ")। .NET 4.0 की रिलीज के रूप में, मैं लिंक से एसक्यूएल को एक अप्रचलित तकनीक मानता हूं। एलएसएस विकास जारी रखने के बारे में एमएस बहुत खुला रहा है।

1) प्रदर्शन

जवाब देने में मुश्किल है। अधिकांश एकल-इकाई संचालन ( CRUD ) के लिए आपको केवल तीनों प्रौद्योगिकियों के साथ समकक्ष प्रदर्शन मिलेगा। आपको यह जानना होगा कि ईएफ और लिंक से एसक्यूएल कैसे काम करते हैं ताकि उन्हें पूरी तरह से उपयोग किया जा सके। मतदान प्रश्नों जैसे उच्च-मात्रा संचालन के लिए, आप ईएफ / एल 2 एस को अपनी इकाई क्वेरी "संकलित" करना चाहते हैं जैसे ढांचे को लगातार SQL को पुन: उत्पन्न करना नहीं है, या आप स्केलेबिलिटी समस्याओं में भाग ले सकते हैं। (संपादन देखें)

थोक अपडेट के लिए जहां आप भारी मात्रा में डेटा अपडेट कर रहे हैं, कच्चे एसक्यूएल या एक संग्रहीत प्रक्रिया हमेशा एक ओआरएम समाधान से बेहतर प्रदर्शन करेगी क्योंकि आपको तारों पर डेटा को ओआरएम को अद्यतन करने के लिए मार्शल करने की ज़रूरत नहीं है।

2) विकास की गति

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

3) साफ / रखरखाव कोड

हाथ नीचे, ईएफ एसक्यूएल / sprocs धड़कता है। चूंकि आपके रिश्तों का मॉडल किया गया है, इसलिए आपके कोड में शामिल होना अपेक्षाकृत कम है। अधिकांश प्रश्नों के लिए पाठकों के संबंधों के संबंध लगभग आत्म-स्पष्ट हैं। आपके डेटा में वास्तव में क्या हो रहा है यह समझने के लिए स्तरीय से स्तरीय डीबगिंग या एकाधिक SQL / मध्यम स्तर के माध्यम से जाने से कुछ भी बुरा नहीं है। ईएफ आपके डेटा मॉडल को आपके कोड में बहुत शक्तिशाली तरीके से लाता है।

4) लचीलापन

संग्रहीत प्रोसेस और कच्चे एसक्यूएल अधिक "लचीला" हैं। अजीब विशिष्ट मामले के लिए तेज़ प्रश्न उत्पन्न करने के लिए आप स्पॉक्स और एसक्यूएल का लाभ उठा सकते हैं, और आप देशी डीबी कार्यक्षमता को आपके और ओआरएम के मुकाबले आसान बना सकते हैं।

5) कुल मिलाकर

संग्रहित प्रक्रियाओं का उपयोग कर एक ओआरएम बनाम चुनने के झूठी डिचोटोमी में पकड़े न जाएं। आप एक ही आवेदन में दोनों का उपयोग कर सकते हैं, और आपको शायद चाहिए। बड़े थोक संचालन को संग्रहीत प्रक्रियाओं या एसक्यूएल (जिसे वास्तव में ईएफ द्वारा बुलाया जा सकता है) में जाना चाहिए, और ईएफ का उपयोग आपके सीआरयूडी परिचालनों और आपके अधिकांश मध्यम-स्तर की आवश्यकताओं के लिए किया जाना चाहिए। शायद आप अपनी रिपोर्ट लिखने के लिए एसक्यूएल का उपयोग करना चुनेंगे। मुझे लगता है कि कहानी का नैतिक वही है जैसा हमेशा होता रहा है। इस काम के लिए सही उपकरण का उपयोग करें। लेकिन इसका पतला है, ईएफ आजकल बहुत अच्छा है (.NET 4.0 के रूप में)। गहराई से इसे पढ़ने और समझने के लिए कुछ वास्तविक समय व्यतीत करें और आप आसानी से कुछ अद्भुत, उच्च-प्रदर्शन ऐप्स बना सकते हैं।

संपादित करें : ईएफ 5 ऑटो-संकलित LINQ क्वेरीज़ के साथ इस हिस्से को थोड़ा सा सरल बनाता है , लेकिन असली उच्च मात्रा वाली सामग्री के लिए, आपको निश्चित रूप से परीक्षण करने और विश्लेषण करने की आवश्यकता होगी कि वास्तविक दुनिया में आपके लिए सबसे अच्छा क्या है।







linq linq-to-sql linq-to-entities linq-to-objects