.NET 2.0 रनटाइम पर LINQ

क्या एक LINQ सक्षम ऐप उस मशीन पर चल सकता है जिसमें केवल .NET 2.0 रनटाइम स्थापित है?

सिद्धांत रूप में, LINQ सिंटेक्टिक चीनी से अधिक कुछ नहीं है, और परिणामस्वरूप आईएल कोड उसी जैसा दिखना चाहिए जैसा कि .NET 2.0 में होगा।

मैं .NET 3.5 पुस्तकालयों का उपयोग किए बिना LINQ कैसे लिख सकता हूं? क्या यह .NET 2.0 पर चल जाएगा?

0
जोड़ा संपादित
विचारों: 1

9 उत्तर

कुछ "हैक्स" हैं जिनमें 3.5 फ्रेमवर्क से System.Core.dll का उपयोग करना शामिल है ताकि इसे .NET 2.0 के साथ चलाया जा सके, लेकिन व्यक्तिगत रूप से मैं ऐसी कुछ हद तक नींव नींव का उपयोग नहीं करना चाहूंगा।

See here: LINQ support on .NET 2.0

  1. Create a new console application
  2. Keep only System and System.Core as referenced assemblies
  3. Set Copy Local to true for System.Core, because it does not exist in .NET 2.0
  4. Use a LINQ query in the Main method. For example the one below.
  5. Build
  6. Copy all the bin output to a machine where only .NET 2.0 is installed
  7. Run

(.NET 2.0 SP1 की आवश्यकता है और मुझे कोई जानकारी नहीं है कि System.Core.dll EUU का उल्लंघन करता है)

0
जोड़ा
@ जोनासटी यदि आप .NET 4.0 पर हैं तो यह आपके लिए लागू नहीं होता है क्योंकि यह LINQ का उपयोग कर .net 2.0 के बारे में है। अपने सेटअप के बारे में विवरण देने, एक अलग सवाल पूछने के लिए स्वतंत्र महसूस करें।
जोड़ा लेखक Michael Stum, स्रोत
लाइसेंस और पेटेंट सामान्य ज्ञान का उल्लंघन करते हैं। ऐसा कोई विचार नहीं है कि माइक्रोसॉफ्ट में इसका जन्म हुआ था। वे सभी पिछले आविष्कारों के कंधों पर बने हैं। सबकुछ सबके लिए है और मुझे आशा है कि एक दिन यह स्पष्ट हो जाएगा। सोच में शिफ्ट एक जरूरी है, अन्यथा हम इसे मानवता के रूप में नहीं बना सकते हैं।
जोड़ा लेखक Mariusz, स्रोत
मैंने बनाया और चलाने के बाद, डीबग फ़ोल्डर को छोड़कर बिन फ़ोल्डर में कुछ भी नहीं है। :( मैं .NET 4.0 विजुअल स्टूडियो 2010 में कंसोल एप्लिकेशन का निर्माण कर रहा हूं।
जोड़ा लेखक Jonas T, स्रोत
धन्यवाद माइकल। मैं बस इतना चाहता हूं कि आउटपुट फाइलें। मैं .NET 2.0 का उपयोग कर रहा हूँ। समस्या यह है कि मैं विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं जो बिन फ़ोल्डर में कोई आउटपुट उत्पन्न नहीं करता है। क्या वैसे भी मैं उन आउटपुट डाउनलोड कर सकता हूं?
जोड़ा लेखक Jonas T, स्रोत
पुनर्वितरण System.Core.dll माइक्रोसॉफ्ट के लाइसेंस का उल्लंघन है
जोड़ा लेखक Lucas, स्रोत

नहीं, क्योंकि जब आपने सोचा था कि LINQ वास्तव में सिर्फ वाक्य रचनात्मक चीनी है, तो वास्तव में यह अभिव्यक्ति पेड़ों का भारी उपयोग होता है - एक सुविधा .NET 2.0 में अनुपस्थित है।

ऐसा कहा जा रहा है कि .NET 3.5 केवल .NET 2.0 के शीर्ष पर बना है, और इसी कारण से आईएल "अलग" या "विशेष" नहीं दिखता है।

मुझे कोई कारण नहीं दिख रहा है कि आपको .NET 3.5 फ्रेमवर्क क्यों इंस्टॉल नहीं करना चाहिए। सब कुछ .NET 2.0 इस पर ठीक काम करेगा, वादा :)

0
जोड़ा
इसके अलावा, "कॉर्पोरेट" दुनिया में, हमारे पास सचमुच ऐसी मशीनें हैं जिन्हें "अपग्रेड" नहीं किया गया है .NET 2.0 । हाँ। गंभीरता से, हम करते हैं।
जोड़ा लेखक cbmeeks, स्रोत
विंडोज एक्सपी को एसपी 3 को .NET 3.0 या उच्चतम स्थापित करने की आवश्यकता है और एम्बेडेड विंडोज एक्सपी चलाने वाले कुछ डिवाइस अपडेट करने के लिए इतना आसान नहीं हैं।
जोड़ा लेखक Okuma.Scott, स्रोत
नोट: अभिव्यक्ति पेड़ IQueryable (LINQ से SQL में) के रूप में उपयोग किए जाते हैं, लेकिन IENumerbale द्वारा नहीं (जैसे LINQ से ऑब्जेक्ट्स में)
जोड़ा लेखक Lucas, स्रोत
.NET 3.0 या उच्चतर विंडोज 2000 पर स्थापित नहीं होंगे।
जोड़ा लेखक Lamar, स्रोत

जहां तक ​​मुझे पता है कि LINQ लाइब्रेरी केवल फ्रेमवर्क 3.0 के बाद उपलब्ध है। यदि आप फ्रेमवर्क 2.0 में समान कुछ उपयोग करना चाहते हैं, तो आपको इसे स्वयं लिखना होगा :) या एक समान तृतीय-पक्ष लाइब्रेरी ढूंढना होगा। मुझे केवल थोड़ी सी जानकारी मिली यहां लेकिन यह मुझे भी विश्वास नहीं था।

0
जोड़ा
फ्रेमवर्क 3.5, वास्तव में, 3.0 नहीं
जोड़ा लेखक Lucas, स्रोत

LINQ को .NET 2.0 पर चलने के लिए आप LINQ स्रोतों का उपयोग मोनो (लिनक्स के लिए .NET) से कर सकते हैं।

IEnumerable : yes 
IQueryable  : yes
LINQ to xml : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore

Someone has done it here:
LINQ for .NET 2.0

0
जोड़ा

आप .NET 2.0 के लिए linqbridge का उपयोग कर सकते हैं

0
जोड़ा

यह अजीब बात है कि किसी ने भी LINQBridge का उल्लेख नहीं किया है। यह छोटी भयानक परियोजना LINQ (IENumerable, लेकिन IQueryable के बिना) का बैकपोर्ट है और इसकी निर्भरता (Func, action, आदि) .NET 2.0 पर है। तथा:

यदि आपका प्रोजेक्ट LINQBridge संदर्भित करता है   संकलन के दौरान, यह बांध जाएगा   LINQBridge के क्वेरी ऑपरेटरों के लिए; अगर यह   संदर्भ प्रणाली। दौरान के दौरान   संकलन, तो यह बांध जाएगा   फ्रेमवर्क 3.5 के क्वेरी ऑपरेटर।

0
जोड़ा
अगर यह IQueryable (यह नहीं करता) का समर्थन नहीं करता है, तो बिंदु क्या है? ? ?
जोड़ा लेखक Stefan Steiger, स्रोत
यह बुरा है कि LINQBridge Linq-2-Xml का समर्थन नहीं करता है :( लिंक-2-एक्सएमएल एक्सएमएल के साथ आसान और अच्छा काम करता है।
जोड़ा लेखक Dmitry Lobanov, स्रोत
लिंकक्रिज का एक नुकसान यह है कि जब आप लिंकक्रिज का उपयोग करते हैं तो उन्हें कुछ पूर्ण मॉकिंग फ्रेमवर्क (जैसे राइनोमोक्स या मोक) का उपयोग करना लगभग असंभव है क्योंकि उन्हें System.Core के संदर्भ की आवश्यकता होती है। RhinoMocks उपयोग करने योग्य है लेकिन यह सबसे अच्छा हिस्सा अनुपलब्ध है क्योंकि आप एक समय में System.Core और LinqBridge का संदर्भ नहीं दे सकते।
जोड़ा लेखक Dmitry Lobanov, स्रोत
मैं बस उसी लेखक द्वारा बैकलिंक raboof.com/projects/backlinq पर आया था! क्या किसी को पता है कि अंतर क्या है या कौन सा नवीनतम है?
जोड़ा लेखक ala, स्रोत
@ala: code.google.com/p/backlinq देखें: "बैकलाइनक स्रोत रहे हैं LINQBridge परियोजना में लुढ़का और विलय हो गया और इसकी पहचान के तहत बनाए रखा। परिणामस्वरूप, इस परियोजना साइट को सेवानिवृत्त कर दिया गया है और यहां अभिलेखीय उद्देश्यों के लिए छोड़ा गया है। कृपया आगे के अपडेट, योगदान और मुद्दों की रिपोर्टिंग के लिए LINQBridge का पालन करें। "
जोड़ा लेखक Mauricio Scheffer, स्रोत
@Quandary: Func, Action और "LINQ टू ऑब्जेक्ट्स" अपने आप पर बहुत उपयोगी हैं। व्यक्तिगत रूप से मैं उन्हें IQueryables से अधिक बहुत का उपयोग करता हूं।
जोड़ा लेखक Mauricio Scheffer, स्रोत
@DmitryLobanov: वास्तविक पुस्तकालय ज़रूरत है उन पुस्तकालयों।
जोड़ा लेखक Mauricio Scheffer, स्रोत
@Dmitry Linq2Xml यह है कि मैं नौकरियों को इतनी जल्दी कैसे प्राप्त करता हूं। एक्सपैथ अभी भी एक अच्छा विकल्प है लेकिन धाराप्रवाह नहीं है।
जोड़ा लेखक Jeremy, स्रोत
+1 मैं इसका बहुत उपयोग करता हूं। नोट: यह LINQ से ऑब्जेक्ट्स (IENumerable एक्सटेंशन) का कार्यान्वयन है, VS2008 (C # 3.0) लक्ष्यीकरण फ्रेमवर्क 2.0+ का उपयोग करते हुए पूरी तरह से काम करता है। यह LINQ से SQL या अन्य LINQ प्रदाताओं का कार्यान्वयन नहीं है।
जोड़ा लेखक Lucas, स्रोत

मुझे सी # के बारे में निश्चित नहीं है।

हालांकि, मुझे पता है कि जब तक आप 2.0 फ्रेमवर्क को लक्षित करने के लिए वीएस 2008 कंपाइलर का उपयोग करते हैं, तब तक आप 3.5 पुस्तकालयों को वीबी LINNQ कोड w / लिख सकते हैं।

हालांकि, आपको अपने स्वयं के कुछ LINQ विधियों को लागू करना होगा।

LINQ निष्पादन योग्य कोड में क्वेरी का अनुवाद करने के लिए एक सिंथेटिक परिवर्तन का उपयोग करता है। असल में, यह इस तरह कोड ले जाएगा:

dim q = from x in xs where x > 2 select x*4;

और इसे इस तरह कोड में परिवर्तित करें:

dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

3.5 फ्रेमवर्क वाले जहाजों की LINQ कार्यक्षमता के लिए, उन विधियों को IENumerable या IQueryable पर विस्तार विधियों के रूप में कार्यान्वित किया जाता है (डेटा सेट पर भी काम करने वाले तरीकों का एक समूह भी है)।

डिफ़ॉल्ट IENumerable एक्सटेंशन विधियों को System.Linq.Eumerable में परिभाषित किया गया है और इस तरह दिखते हैं:


public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)

   'do the transformation...

end function

IQueryable विस्तार विधियां लैम्बडास के बजाए अभिव्यक्ति के रूप में अभिव्यक्ति के पेड़ लेती हैं। वे इस तरह दिखते हैं:

 
 public function Select(of T, R)(source as IQueryable, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function

अभिव्यक्ति वृक्ष संस्करण आपको खंडों को प्रदान किए गए अभिव्यक्तियों का वृक्ष प्रतिनिधित्व प्राप्त करने में सक्षम बनाता है जिसका उपयोग तब SQL कोड (या जो भी आप चाहते हैं) उत्पन्न करने के लिए किया जा सकता है।

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

यदि आप DLINQ का उपयोग करना चाहते हैं, तो चीजें थोड़ा और कठिन हो जाएंगी।

0
जोड़ा
लेकिन यदि आप चाहें तो आप अपना खुद का अभिव्यक्ति वृक्ष कार्यान्वयन लिख सकते हैं।
जोड़ा लेखक Scott Wisniewski, स्रोत
.. और हाँ, वीबी 9.0 के बारे में आपने जो भी कहा है, वह सी # 3.0 पर लागू होता है (नए कंपाइलर का उपयोग करके, लेकिन पुराने एफएक्स संस्करण को लक्षित करना)
जोड़ा लेखक Lucas, स्रोत
+1, हालांकि ध्यान दें कि अभिव्यक्ति पेड़ (IQueryable के लिए) केवल 3.5+ में उपलब्ध हैं
जोड़ा लेखक Lucas, स्रोत

सिद्धांत रूप में हां, बशर्ते आप LINQ विशिष्ट असेंबली और किसी भी निर्भरता वितरित करें। हालांकि यह माइक्रोसॉफ्ट के लाइसेंसिंग का उल्लंघन कर रहा है। स्कॉट हंसेलमैन ने ASP.NET 2.0 पर एएसपी.नेट एमवीसी को तैनात करना के बारे में एक ब्लॉग पोस्ट लिखा है जो कि है आप जो करना चाहते हैं उसके समान।

0
जोड़ा

संक्षिप्त जवाब:

  • LINQ to Objects: yes (IEnumerable)
  • LINQ to SQL/Entities: no (IQueryable)
  • LINQ to XML/DataSets: not yet?

यह प्रश्न .NET 3.5 फीचर्स स्वचालित रूप से उपलब्ध हैं या VS2008 से .Net 2.0 को लक्षित करते समय थोड़ा प्रयास करते हैं।

असल में, कुछ भी जो "सिंटैक्स चीनी" है और नए कंपाइलर्स (सी # 3.0, वीबी 9.0) 2.0-संगत आईएल के रूप में उत्सर्जित होंगे। इसमें LINQ द्वारा उपयोग की जाने वाली कई सुविधाएं शामिल हैं जैसे अज्ञात वर्ग, लैम्बडास अज्ञात प्रतिनिधि, स्वचालित गुण, ऑब्जेक्ट प्रारंभकर्ता, और संग्रह प्रारंभकर्ता।

Some LINQ features use classes, interfaces, delegates, and extension methods that live in the new 3.5 assemblies (such as System.Core.dll). Redistributing these assemblies is a license violation, but they could be reimplemented. Using extension methods need only that you declare an empty System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects relies on IEnumerable extensions and several delegate declarations (the Action and Func families) and have been implemented in LINQBridge (as mausch mentioned). LINQ to xml and LINQ to DataSets rely on LINQ to Objects which I guess could also be implemented for .Net 2.0, but I haven't seen this done yet.

LINQ to SQL and LINQ to Entities require many new classes (DataContext/ObjectContext, lots of attributes, EntitySet, EntityRef, Link, IQueryable, etc) and expression trees, which, even if somehow reimplemented, will probably require at least .Net 2.0 SP1 to work.

0
जोड़ा