2009-08-01 7 views
7

"What is the Java equivalent of LINQ?" पढ़ने के बाद, मैं जानना चाहता हूं, (लोअरकेस) भाषा-एकीकृत क्वेरी है - दूसरे शब्दों में ऑब्जेक्ट संग्रह या बाहरी स्टोर पर क्वेरी करने के लिए एक संक्षिप्त वाक्यविन्यास का उपयोग करने की क्षमता - का मार्ग बनना सबसे सामान्य उद्देश्य भाषाओं के लिए भविष्य? या LINQ तकनीक का एक दिलचस्प टुकड़ा है जो माइक्रोसॉफ्ट भाषाओं तक ही सीमित रहेगा? बीच में कुछ?LINQ (या linq) एक विशिष्ट उपकरण है, या यह आधारभूत बनने के रास्ते पर है?

EDIT: मुझे अन्य भाषाओं को नहीं पता, लेकिन जैसा कि मैं सीख रहा हूं ऐसा लगता है जैसे LINQ न तो अभूतपूर्व और न ही अद्वितीय है। LINQ - lambdas और प्रश्नों में विचार - अन्य भाषाओं में मौजूद हैं, और विचार फैल रहे प्रतीत होते हैं।

उत्तर

6

LinQ से पहले (php के अपने उदाहरण की तरह) अन्य भाषाओं को हस्तांतरित किया जाएगा, अजगर Generator Expressions जो संग्रह से अधिक प्रश्नों के प्रदर्शन के लिए विशिष्ट वाक्यविन्यास हैं था। पाइथन की वाक्यविन्यास लिंक की तुलना में अधिक कम है, लेकिन आप मूल रूप से लिनक में जितनी आसान हो उतनी क्वेरी कर सकते हैं।

सी # Linq:

var orders = from c in customers 
      where c.Region == "WA" 
      from o in c.Orders 
      where o.OrderDate >= cutoffDate 
      select new {c.CustomerID, o.OrderID}; 

अजगर जेनरेटर भाव: महीनों पहले, मैं एक blog post comparing queries in C# and Python लिखा था, यहाँ एक छोटा सा उदाहरण है

orders = ((c.customer_id, o.order_id) 
      for c in customers if c.region == 'WA' 
      for o in c.orders if o.date >= cutoff_date) 

प्रोग्रामिंग भाषाओं में प्रश्नों के लिए सिंटेक्स एक अत्यंत उपयोगी उपकरण हैं । मेरा मानना ​​है कि हर भाषा में ऐसा कुछ शामिल होना चाहिए।

+1

कुछ अन्य समान विशेषताओं को सूचीबद्ध करने के लिए: हास्केल की सूची समझ है (और किसी भी पायथन प्रोग्रामर को तुरंत जेनरेटर के रूप में पहचानने की संभावना है); स्कैला में भी इसी तरह की चीजें हैं। –

+0

लिंक भी इससे अधिक जटिल सामग्री कर सकता है – Casebash

2

मैं कहूंगा कि किसी भी भाषा में एकीकृत क्वेरी तकनीक समय पर आधारभूत हो जाएगी, विशेष रूप से कार्यात्मक प्रोग्रामिंग भाषाओं के हित में हालिया वृद्धि को देखते हुए।

LINQ निश्चित रूप से सबसे बड़े कारणों मैं व्यक्तिगत रूप से नेट के साथ चिपके हुए हूँ, वैसे भी में से एक है - यह व्यक्तिगत रूप से मेरे लिए मूलभूत बन गया है, और मैं दांव लगाना चाहते devs के एक बहुत रूप में अच्छी तरह इस तरह से महसूस करते हैं।

1

अस्वीकरण: मैंने LINQ का कभी भी उपयोग नहीं किया है। कृपया मुझे सुधारें अगर मैं गलत हूं।

कई भाषाओं में संरचनाएं होती हैं जो भाषा डेटा प्रकारों के साथ LINQ के समान चीजों को अनुमति देती हैं। स्पष्ट रूप से सबसे दिलचस्प विशेषता यह है कि LINQ संरचनाओं को SQL में परिवर्तित किया जा सकता है, लेकिन यह LINQ: http://www.aminus.org/blogs/index.php/2008/04/22/linq-in-python?blog=2 के लिए विशिष्ट नहीं है।

+2

बस एक स्पष्टीकरण के रूप में, LINQ-to-SQL और LINQ-to-entities (जिन तकनीकों का आप उल्लेख कर रहे हैं वे LINQ अभिव्यक्ति को डेटाबेस क्वेरी में अनुवाद कर सकते हैं) LINQ के शीर्ष पर बनाए गए हैं। इसके मूल में, LINQ केवल विशेष इंटरफेस पर एक्सटेंशन विधियों के लिए कॉल को चेन करने का एक भाषा-विशिष्ट तरीका है। –

+0

कई भाषाओं में चयन कथन हैं, जहां खंड हैं? मैं उन लोगों के बारे में नहीं जानता। डेटाबेस उन्मुख भाषाओं, हाँ। लेकिन सामान्य उद्देश्य वाले लोग? पर्ल? अजगर? जावा, मुझे लगता है कि मैंने संदर्भित प्रश्न से अनुमान लगाया है, नहीं। क्या आप कुछ उदाहरण दे सकते हैं? – Cheeso

+0

पायथन में 'चयन' कथन या 'कहां' खंड नहीं हैं, लेकिन सूची और जेनरेटर समझ एक ही काम करते हैं। कार्यात्मक भाषाओं में सूची समझ बहुत आम हैं। –

0

मुझे नहीं लगता कि आप वास्तव में इसे (या कई चीजें) वर्गीकृत कर सकते हैं। जबकि मैं शायद ही कहूंगा कि LINQ एक विशिष्ट उपकरण है - इसमें कई लोगों के लिए कई अनुप्रयोग हैं - यह "आधारभूत" आईएमओ नहीं है। हालांकि, मैं यह भी नहीं कहूंगा कि LINQ (या समकक्ष) भाषा-विशिष्ट क्वेरीिंग भाषा गेम के इस चरण में वास्तव में आधारभूत हो सकती है। भविष्य में, शायद, लेकिन अभी आप कई अलग-अलग तरीकों से एक प्रश्न बना सकते हैं जो प्रदर्शन के विभिन्न स्तरों को स्पष्ट रूप से उत्पन्न करता है।

0

यह रूबी के सक्रिय रिकॉर्ड की तरह मेरे लिए बहुत कुछ लगता है, लेकिन मैंने LINQ का कभी भी उपयोग नहीं किया है। किसी ने दोनों का इस्तेमाल किया? (मैंने इसे एक टिप्पणी के रूप में पोस्ट किया होगा, लेकिन मैं वास्तव में उत्तर पर अपडेट करना चाहता हूं - शायद मैं गलत हूं इसलिए यह डाउनवॉटेड हो जाएगा :))

(असल में मुझे कहना चाहिए कि एआर है एसक्यूएल को LINQ की तरह, वे के रूप में तक मुझे पता है)

+0

देखें, यह समस्या है। मुझे LINQ पता है लेकिन एआर नहीं। आप एआर जानते हैं लेकिन LINQ नहीं। यह पता लगाने की कोशिश कर रहे हैं कि वे कहां समान हैं, जहां वे अलग हैं, इतना आसान नहीं है। आक। – Cheeso

+0

एआर और LINQ वास्तव में ऑर्थोगोनल हैं और इन्हें एक साथ भी इस्तेमाल किया जा सकता है। LINQ आपको प्रकार की सुरक्षा और सबकुछ के साथ सीधे अपनी स्रोत भाषा में SQLesque कथन लिखने देता है। इन बयानों को तब कुछ प्रदाता द्वारा व्याख्या किया जाता है। ActiveRecord का मतलब है कि ऑब्जेक्ट्स और पंक्तियों के बीच 1-1 मैपिंग है और प्रत्येक ऑब्जेक्ट स्वयं को सहेजने के लिए ज़िम्मेदार है। एक LINQ क्वेरी ऐसी ऑब्जेक्ट्स का संग्रह वापस कर सकती है। –

+0

सक्रिय रिकॉर्ड में एक क्वेरी सिस्टम बनाया गया है जो स्वचालित रूप से अपनी मूल भाषा और SQL के बीच अनुवाद करता है। एआर डेटाबेस डेटाबेस के आधार पर वर्गों को स्वत: बनाता है। इसलिए बिना किसी कोड के आप "user.find (name =" bill ")" कह सकते हैं और बिल के बराबर फ़ील्ड नाम के साथ उपयोगकर्ता ऑब्जेक्ट्स का संग्रह प्राप्त कर सकते हैं (वाक्यविन्यास लगभग निश्चित रूप से गलत है क्योंकि मैंने उपयोग नहीं किया है अब कुछ साल के लिए रूबी)। साथ ही अधिक उन्नत प्रश्न भी संभव हैं। रूबी में सुरक्षा टाइप प्रासंगिक नहीं है। –

4

अन्य लक्ष्यों के लिए AR लागू नहीं किया है खर्च साल

  • handcrafting डेटाबेस का उपयोग (ओह तो कई भाषाओं में)
  • इकाई throgh जाने के बाद ढांचा
  • फ़ैश के माध्यम से डेटा प्राप्त करना और संग्रहीत करना

यह समय के साथ किसी डेटाबेस से बात करने के लिए आसान पहुंच और भाषा एकीकृत तरीके से बनाया गया था। LINQ से SQL को कई साल पहले बनाया जाना चाहिए था। मैं उस टीम की सराहना करता हूं जो इसके साथ आता है - आखिरकार डेटाबेस एक्सेस फ्रेमवर्क जो समझ में आता है।

यह सही नहीं है, फिर भी, और इस समय मेरा मुख्य सिरदर्द अन्य सामान्य डेटाबेस के लिए LINQ2SQL के लिए कोई वास्तविक समर्थन नहीं है, न ही जावा के लिए ऐसा कुछ भी है।

(सामान्य रूप में LINQ सिर्फ LINQ SQL के लिए नहीं :-)

+0

इकाई फ्रेमवर्क के बारे में क्या? यह किसी भी प्रकार के डेटाबेस का समर्थन कर सकता है, आपको बस कुछ प्रदाताओं के लिए पर्याप्त प्रदाता –

+0

"पर्याप्त प्रदाता" की आवश्यकता है। वे मौजूद नहीं हैं, या उत्पादन अभी तक तैयार नहीं हैं। – Leeeroy

2

मुझे लगता है कि कार्यात्मक अवधारणाओं जो LINQ के तहत pinnings हैं कई भाषाओं में लोकप्रिय हो जाएगा भी btw अच्छा है,। वस्तुओं के वांछित सेट प्राप्त करने के लिए कार्यों के एक सेट के माध्यम से वस्तुओं का अनुक्रम पास करना। अनिवार्य रूप से, क्वेरी वाक्यविन्यास पर लैम्ब्डा वाक्यविन्यास का उपयोग कर।

यह कोडिंग का एक बहुत शक्तिशाली और अभिव्यक्तिपूर्ण तरीका है।

ऐसा इसलिए नहीं है क्योंकि मुझे लगता है कि यह चीजों को करने का मूल रूप से बेहतर तरीका है (यानी क्वेरी सिंटैक्स पर लैम्ब्डा)। तुलनात्मक रूप से बोलते हुए, प्रश्न वाक्यविन्यास जोड़ने के लिए क्वेरी अभिव्यक्तियों के लिए अंतर्निहित लाइब्रेरी समर्थन को जोड़ना बहुत आसान है। सभी आवश्यक है कि प्रश्नों के लिए लैम्ब्डा वाक्यविन्यास

  • lambdas
  • अंतर्निहित क्वेरी तरीकों

अधिकांश नए भाषाओं का समर्थन lambdas है (यहां तक ​​कि सी ++ अंत में उन्हें मिल रहा है!)। लाइब्रेरी समर्थन जोड़ना काफी सस्ता है और आमतौर पर प्रेरित व्यक्ति द्वारा किया जा सकता है।

भाषा में क्वेरी वाक्यविन्यास प्राप्त करना हालांकि बहुत अधिक काम की आवश्यकता है।

1

मुझे नहीं लगता कि LINQ माइक्रोसॉफ्ट भाषाओं तक ही सीमित हो जाएगा, यह बाहर की जाँच, वहाँ पहले से ही php के लिए कुछ है, यह बाहर की जाँच http://phplinq.codeplex.com/

मुझे लगता है कि Linq विकास की प्रक्रिया में बहुत बढ़िया टूल है और व्यक्तिगत रूप से होगा वास्तव में बहुत खुशी अगर यह

संबंधित मुद्दे