سؤال

هل يمكن تشغيل تطبيق LINQ الممكّن على جهاز تم تثبيت وقت تشغيل .NET 2.0 عليه فقط؟

من الناحية النظرية، LINQ ليس أكثر من مجرد سكر نحوي، ويجب أن يبدو كود IL الناتج كما هو الحال في .NET 2.0.

كيف يمكنني كتابة LINQ دون استخدام مكتبات .NET 3.5؟هل سيتم تشغيله على .NET 2.0؟

هل كانت مفيدة؟

المحلول

هناك بعض "الاختراقات" التي تتضمن استخدام System.Core.dll من 3.5 Framework لتشغيله مع .net 2.0، لكنني شخصيًا لا أرغب في استخدام مثل هذا الأساس المهتز إلى حد ما.

انظر هنا: دعم LINQ على .NET 2.0

  1. إنشاء تطبيق وحدة تحكم جديد
  2. احتفظ فقط بالنظام وSystem.Core كمجموعات مرجعية
  3. قم بتعيين Copy Local على true لـ System.Core، لأنه غير موجود في .NET 2.0
  4. استخدم استعلام LINQ في الطريقة الرئيسية.على سبيل المثال واحد أدناه.
  5. يبني
  6. انسخ جميع مخرجات الحاوية إلى جهاز تم تثبيت .NET 2.0 عليه فقط
  7. يجري

(يتطلب .net 2.0 SP1 وليس لدي أي فكرة عما إذا كان تجميع System.Core.dll ينتهك اتفاقية ترخيص المستخدم النهائي)

نصائح أخرى

ومن الغريب أن أحدا لم يذكر ذلك لينكبريدج.هذا المشروع الصغير الرائع هو عبارة عن منفذ خلفي لـ LINQ (IEnumerable، ولكن بدون IQueryable) وتبعياته (Func، Action، إلخ) إلى .NET 2.0.و:

إذا كان مشروعك يشير إلى Linqbridge أثناء التجميع ، فسيتم ربطه بمشغلي استعلام Linqbridge ؛إذا كان يشير إلى نظام.

من الناحية النظرية نعم، بشرط أن تقوم بتوزيع تجميعات LINQ المحددة وأي تبعيات.لكن هذا يعد انتهاكًا لترخيص Microsoft.كتب سكوت هانسيلمان تدوينة حول نشر ASP.NET MVC على ASP.NET 2.0 وهو مشابه لما تريد القيام به.

يمكنك استخدام مصادر LINQ من mono (.NET لنظام Linux) لتشغيل LINQ على .NET 2.0.

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

لقد قام شخص ما بذلك هنا:
لينك ل.NET 2.0

اجابة قصيرة:

  • LINQ للكائنات:نعم (IEnumerable<T>)
  • LINQ إلى SQL/الكيانات:لا (IQueryable<T>)
  • LINQ إلى XML/مجموعات البيانات:ليس بعد؟

يرى هذا السؤال حول ميزات .Net 3.5 المتوفرة تلقائيًا أو بجهد قليل عند استهداف .Net 2.0 من VS2008.

في الأساس، أي شيء يمثل فقط "سكر بناء الجملة" والمترجمات الجديدة (C# 3.0، VB 9.0) تنبعث كـ IL متوافق مع 2.0 سوف تعمل.يتضمن ذلك العديد من الميزات التي تستخدمها LINQ مثل الفئات المجهولة، و lambdas كمفوضين مجهولين، والخصائص التلقائية، ومهيئات الكائنات، ومهيئات المجموعة.

تستخدم بعض ميزات LINQ الفئات والواجهات والمفوضين وطرق الامتداد الموجودة في التجميعات 3.5 الجديدة (مثل System.Core.dll).إعادة توزيع هذه التجميعات انتهاك الترخيص، ولكن يمكن إعادة تنفيذها.يتطلب استخدام طرق الامتداد فقط أن تعلن أنه فارغ System.Runtime.CompilerServices.ExtensionAttribute.يعتمد LINQ على الكائنات على IEnumerable<T> الامتدادات والعديد من إعلانات المندوبين (ملف Action<T> و Func<T> الأسر) وتم تنفيذها في لينكبريدج (مثل mausch مذكور).يعتمد LINQ إلى XML وLINQ إلى DataSets على LINQ to Objects والذي أعتقد أنه يمكن تنفيذه أيضًا لـ .Net 2.0، لكنني لم أر هذا يتم تنفيذه بعد.

يتطلب LINQ إلى SQL وLINQ إلى الكيانات العديد من الفئات الجديدة (DataContext/ObjectContext, ، الكثير من الصفات، EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, ، إلخ) وأشجار التعبير، والتي، حتى لو تمت إعادة تنفيذها بطريقة أو بأخرى، فمن المحتمل أن تتطلب على الأقل .Net 2.0 SP1 لكي تعمل.

لست متأكدًا من C#.

ومع ذلك، أعلم أنه يمكنك كتابة كود VB LINNQ بدون مكتبات 3.5 طالما أنك تستخدم برنامج التحويل البرمجي VS 2008 لاستهداف إطار عمل الإصدار 2.0.

ومع ذلك، سيتعين عليك تنفيذ بعض أساليب 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);

بالنسبة لوظيفة LINQ التي تأتي مع إطار العمل 3.5، يتم تنفيذ هذه الأساليب كأساليب ملحقة إما على IEnumerable أو IQueryable (هناك أيضًا مجموعة من الأساليب التي تعمل على مجموعات البيانات أيضًا).

يتم تعريف أساليب ملحق IEnumerable الافتراضية في System.Linq.Enumerable وتبدو كما يلي:

<Extension()>
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 أشجار التعبيرات كوسيطات، بدلاً من معاملات lambda.تبدو مثل هذا:

 <Extension()>
 public function Select(of T, R)(source as IQueryable<T>, 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، فستكون الأمور أكثر صعوبة بعض الشيء.

لا، لأنه بينما كنت تعتقد أن LINQ هو في الواقع مجرد سكر نحوي، فإنه في الواقع يستخدم أشجار التعبير بكثافة - وهي ميزة غائبة في .NET 2.0.

ومع ذلك، فإن .NET 3.5 يتراكم فقط فوق .NET 2.0، وهذا هو السبب وراء عدم ظهور IL "مختلفًا" أو "مميزًا".

لا أرى سببًا يمنعك من تثبيت .NET 3.5 Framework.كل شيء .NET 2.0 سوف يعمل بشكل جيد عليه، وعد :)

على حد علمي، مكتبة LINQ متاحة فقط منذ الإصدار 3.0 من إطار العمل.إذا كنت تريد استخدام شيء مشابه في إطار العمل 2.0، فستحتاج إلى إعادة كتابته بنفسك :) أو البحث عن مكتبة خارجية مماثلة.لم أجد سوى القليل من المعلومات هنا لكنها لم تقنعني أيضًا.

يمكنك استخدام com.linqbridge ل.نت 2.0

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top