LINQ pe timpul rulării .NET 2.0

voturi
53

Poate un LINQ activat rula aplicații pe o mașină care numai a instalat runtime-ul .NET 2.0?

În teorie, LINQ nu este nimic mai mult decât zahărul sintactic, iar codul IL rezultat ar trebui să arate la fel cum ar fi în .NET 2.0.

Cum pot scrie LINQ fără a utiliza .NET 3.5 biblioteci? Va rula pe .NET 2.0?

Întrebat 05/08/2008 la 13:03
sursa de către utilizator
În alte limbi...                            


9 răspunsuri

voturi
76

Este ciudat că nimeni nu a menționat LINQBridge . Acest proiect mic minunat este un backport de LINQ (IEnumerable, dar fără IQueryable) și dependențele sale ( înde plinit, acțiune, etc) , .NET 2.0. Și:

În cazul în care proiectul face referire la LINQBridge în timpul compilării, atunci se va lega la operatorii de interogare LINQBridge lui; în cazul în care aceasta face referire System.Core în timpul compilării, atunci se va lega la operatorii de interogare Framework 3.5 a lui.

Publicat 27/12/2008 la 03:51
sursa de către utilizator

voturi
32

Există unele „Hacks“, care implică utilizarea unui System.Core.dll din Framework 3.5 pentru a face rula cu .net 2.0, dar eu personal nu aș vrea folosi o astfel de fundație oarecum șubredă.

Vezi aici: suport LINQ pe .NET 2.0

  1. Creați o nouă aplicație consolă
  2. Păstrați numai în sistem și System.Core ca ansambluri care se face referire
  3. Setați Copiere local la true pentru System.Core, deoarece nu există în .NET 2.0
  4. Utilizați o interogare LINQ în metoda principală. De exemplu, cel de mai jos.
  5. Construi
  6. Copiați toate de ieșire bin într-o mașină în cazul în care este instalat numai .NET 2.0
  7. Alerga

(Necesită .net 2.0 SP1 și nu am idee dacă Legarea System.Core.dll încalcă EULA)

Publicat 05/08/2008 la 13:07
sursa de către utilizator

voturi
11

În teorie , da, cu condiția să distribuiți ansamblurile specifice LINQ și orice alte dependențe. Cu toate acestea , care încalcă licențiere Microsoft. Scott Hanselman a scris un post de blog despre Implementarea ASP.NET MVC pe ASP.NET 2.0 , care este similar cu ceea ce doresc să facă.

Publicat 05/08/2008 la 13:07
sursa de către utilizator

voturi
7

Puteți utiliza sursele LINQ de la mono (.NET pentru Linux) pentru a obține LINQ care rulează pe .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

Cineva a făcut - o aici:
LINQ pentru .NET 2.0

Publicat 04/03/2011 la 19:51
sursa de către utilizator

voturi
6

Răspuns scurt:

  • LINQ la obiecte: da ( IEnumerable<T>)
  • LINQ SQL / entități: nu ( IQueryable<T>)
  • LINQ XML / Datasets: nu încă?

A se vedea această întrebare despre .Net 3.5 Caracteristici disponibile în mod automat sau cu puțin efort atunci când țintirea .Net 2.0 de la VS2008.

Practic, tot ceea ce este doar „zahăr de sintaxă“ și noile compilatoare (C # 3.0, VB 9.0) emit ca 2.0 compatibile IL va funcționa. Aceasta include multe caracteristici folosite de LINQ, cum ar fi clase anonime, ca delegați anonimi Lambda, proprietăți automate, initializatori de obiecte și initializatori de colectare.

Unele caracteristici LINQ folosesc clase, interfețe, delegați, și metode de extensie care trăiesc în noile ansambluri 3.5 (cum ar fi System.Core.dll). Redistribuirea aceste ansambluri este o încălcare de licență, dar acestea ar putea fi reimplemented. Folosirea unor metode de extensie trebuie doar să declare un gol System.Runtime.CompilerServices.ExtensionAttribute. LINQ Obiectele se bazează pe IEnumerable<T>extensii și mai multe declarații delegatului (a Action<T>și Func<T>familii) , și au fost puse în aplicare în LINQBridge (așa cum mausch menționat). LINQ XML și LINQ seturi de date se bazează pe LINQ la obiecte pe care cred ca ar putea fi , de asemenea , puse în aplicare pentru .Net 2.0, dar nu am văzut acest lucru făcut încă.

LINQ și SQL LINQ entități necesită multe clase noi ( DataContext/ ObjectContext, o mulțime de atribute, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc.) și copaci, care, chiar dacă într -un fel reimplemented, va necesita , probabil , cel puțin .NET 2.0 SP1 pentru a lucra exprimare.

Publicat 19/05/2009 la 17:19
sursa de către utilizator

voturi
5

Nu sunt sigur despre C #.

Eu știu, totuși, că puteți scrie cod VB LINNQ w / out 3.5 biblioteci, atâta timp cât utilizați compilatorul VS 2008 pentru a viza cadrul 2.0.

Veți, cu toate acestea, trebuie să pună în aplicare unele dintre metodele LINQ sine.

LINQ folosește o transformare syntatic pentru a traduce interogări în cod executabil. Practic, acesta va avea un cod ca acest lucru:

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

și-l transforma într-un cod de genul:

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

Pentru funcționalitatea LINQ că navele cu cadrul 3.5, aceste metode sunt puse în aplicare ca metode de extensie pe fiecare IEnumerable sau IQueryable (există, de asemenea, o grămadă de metode care funcționează pe seturi de date prea).

Metodele de extensie IEnumerable implicite sunt definite în System.Linq.Enumerable si arata astfel:

<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

Metodele de extensie IQueryable ia expresii copaci ca argumente, mai degrabă decât din Lambda. Ei arata ca aceasta:

 <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

Versiunile de copac expresie vă permite să obțineți o reprezentare arborescentă a expresiilor prevăzute la clauzele care pot fi apoi utilizate pentru a genera un cod SQL (sau ce vreodată altceva vrei).

Ai putea crea, probabil, propria versiune de LINQ la obiecte în aproximativ o zi sau cam asa ceva. Totul e destul de drept înainte.

Dacă doriți să utilizați DLINQ, atunci lucrurile ar fi un pic mai dificil.

Publicat 10/10/2008 la 22:30
sursa de către utilizator

voturi
3

Nu, pentru că în timp ce ai crezut că LINQ este într-adevăr de zahăr doar sintactic, ea arbori de expresie, de fapt folosit foarte mult - o caracteristică absentă în .NET 2.0.

Acestea fiind spuse .NET 3.5 se bazează doar pe partea de sus a .NET 2.0, și că este motivul pentru care IL nu arata „diferit“ sau „speciale“.

Nu văd un motiv pentru care nu ar trebui să instalați doar Framework .NET 3.5. Totul .NET 2.0 va funcționa bine pe ea, promit :)

Publicat 05/08/2008 la 13:07
sursa de către utilizator

voturi
2

Din câte știu eu biblioteca LINQ este disponibilă numai deoarece cadrul 3.0. Dacă doriți să utilizați ceva similar în cadrul 2.0, va trebui să - l rewritte tine :) sau a găsi o bibliotecă similară terță parte. Am găsit doar un pic de informație aici , dar nu ma convins nici.

Publicat 05/08/2008 la 13:14
sursa de către utilizator

voturi
0

Puteți utiliza linqbridge pentru .net 2.0

Publicat 25/03/2015 la 20:05
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more