LINQ op het .NET 2.0 Runtime

stemmen
53

Kan een LINQ ingeschakeld app draaien op een machine die heeft alleen de .NET 2.0 runtime geïnstalleerd?

In theorie, LINQ is niets meer dan syntactische suiker, en de daaruit voortvloeiende IL code moet zien er hetzelfde uit als het in .NET 2.0 zou hebben.

Hoe kan ik schrijf LINQ zonder gebruik te maken van de NET 3.5 bibliotheken? Zal het draaien op .NET 2.0?

De vraag is gesteld op 05/08/2008 om 13:03
bron van user
In andere talen...                            


9 antwoorden

stemmen
76

Het is raar dat niemand heeft gezegd LINQBridge . Deze kleine geweldige project is een backport van LINQ (IEnumerable, maar zonder IQueryable) en zijn afhankelijkheden (Func, Actie, etc) naar .NET 2.0. En:

Als uw project verwijst naar LINQBridge bij het samenstellen, dan zal het binden aan LINQBridge's query's; als het System.Core verwijst bij het samenstellen, dan zal het binden aan Framework 3.5 van query's.

antwoordde op 27/12/2008 om 03:51
bron van user

stemmen
32

Er zijn een aantal "hacks" die met behulp van een System.Core.dll van de 3,5 Framework te laten draaien met .net 2.0 te betrekken, maar persoonlijk zou ik niet willen gebruiken, een ietwat wankele basis.

Zie hier: LINQ-ondersteuning op .NET 2.0

  1. Maak een nieuwe console applicatie
  2. Uitsluitend System en System.Core zoals genoemd assemblages
  3. Stel Copy Local te gelden voor System.Core, omdat het niet bestaat in .NET 2.0
  4. Gebruik een LINQ query in de belangrijkste methode. Bijvoorbeeld hieronder.
  5. Bouwen
  6. Kopieer alle bin uitvoer van de op een machine waar slechts .NET 2.0 is geïnstalleerd
  7. Rennen

(Vereist .net 2.0 SP1 en ik heb geen idee of het bundelen van de System.Core.dll in strijd met de EULA)

antwoordde op 05/08/2008 om 13:07
bron van user

stemmen
11

In theorie ja, op voorwaarde dat verdelen de LINQ specifieke vergaderingen en afhankelijkheden. Maar dat is in strijd met Microsoft licenties. Scott Hanselman schreef een blog post over het implementeren van ASP.NET MVC op ASP.NET 2.0 die vergelijkbaar is met wat je wil doen.

antwoordde op 05/08/2008 om 13:07
bron van user

stemmen
7

U kunt de LINQ bronnen van mono (.NET voor Linux) gebruiken om LINQ draait op .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

Iemand heeft hier gedaan:
LINQ for .NET 2.0

antwoordde op 04/03/2011 om 19:51
bron van user

stemmen
6

Kort antwoord:

  • LINQ to Objects: ja ( IEnumerable<T>)
  • LINQ to SQL / Entities: nee ( IQueryable<T>)
  • LINQ to XML / DataSets: nog niet?

Zie deze vraag over .Net 3.5 functies die beschikbaar zijn automatisch of met weinig inspanning bij het richten .Net 2.0 van VS2008.

In principe, iets dat slechts "syntax suiker" en de nieuwe compilers (C # 3.0, VB 9.0) uit te stoten als 2.0-compatible IL zal werken. Dit bevat vele faciliteiten die worden gebruikt door LINQ zoals anonieme klassen, lambda als anonieme afgevaardigden, automatische eigenschappen, object initialiseerders, en het verzamelen initialiseerders.

Sommige LINQ functies klassen, interfaces, afgevaardigden, en uitbreiding methoden die in de nieuwe 3,5 samenstellen (zoals System.Core.dll) leven. Herverdeling van deze samenstellen is een inbreuk op een licentie, maar ze konden worden opnieuw geïmplementeerd. Met behulp van extension methods hoeft alleen maar dat je een lege verklaren System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects is gebaseerd op IEnumerable<T>extensies en een aantal gedelegeerde verklaringen (het Action<T>en Func<T>families) en zijn in geïmplementeerd LINQBridge (zoals mausch vermeld). LINQ to XML en LINQ to DataSets vertrouwen op LINQ to Objects, die ik denk dat kan ook worden uitgevoerd voor .Net 2.0, maar ik heb nog niet gezien dit gedaan.

LINQ to SQL en LINQ to Entities vereisen veel nieuwe klassen ( DataContext/ ObjectContext, veel attributen, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc) en expressie bomen, die, zelfs als een of andere manier opnieuw geïmplementeerd, zal waarschijnlijk vereisen ten minste .Net 2.0 SP1 om te werken.

antwoordde op 19/05/2009 om 17:19
bron van user

stemmen
5

Ik ben niet zeker over C #.

Ik weet wel dat je VB LINNQ code kunnen schrijven w / uit de 3,5 bibliotheken, zolang je de VS 2008 compiler gebruiken om de doelstelling van de 2.0 framework.

Je zult echter wel een aantal van de LINQ methoden toe te passen je zelf.

LINQ maakt gebruik van een syntatic transformatie om vragen te vertalen naar uitvoerbare code. Kortom, het zal de code te nemen als volgt:

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

en omzetten in code als volgt:

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

Voor de LINQ functionaliteit die wordt geleverd met de 3.5 framework, die methoden worden als extension methods aan beide IEnumerable of IQueryable uitgevoerd (er is ook een aantal methoden die werken op datasets ook).

De standaard IEnumerable extension methods worden gedefinieerd in System.Linq.Enumerable en er als volgt uitzien:

<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

De IQueryable extension methods nemen uitdrukkingen bomen als argumenten, in plaats van lambda. Ze zien er als volgt uit:

 <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

De uitdrukking boom versies kunt u een boom voorstelling van de uitdrukkingen die aan de bepalingen die vervolgens kan worden gebruikt om SQL-code (of wat ooit anders je wilt) te genereren te krijgen.

Je kan waarschijnlijk uw eigen versie van LINQ to objecten in ongeveer een dag of zo. Het is allemaal vrij ongecompliceerd.

Als u wilt DLINQ gebruiken, dan dingen zou een beetje moeilijker.

antwoordde op 10/10/2008 om 22:30
bron van user

stemmen
3

Nee, want terwijl je dacht dat LINQ is eigenlijk gewoon syntactische suiker, het eigenlijk intensief gebruikt expressie bomen - een functie ontbreekt in .NET 2.0.

Dat gezegd zijnde NET 3.5 bouwt slechts tot op de top van .NET 2.0, en dat is de reden waarom de IL niet "anders" of "speciale" uitziet.

Ik heb geen reden waarom je moet niet alleen het .NET 3.5 Framework te zien. Alles .NET 2.0 zal goed werken, beloven :)

antwoordde op 05/08/2008 om 13:07
bron van user

stemmen
2

Voor zover ik weet dat de LINQ bibliotheek is alleen beschikbaar sinds het kader 3.0. Als u wilt iets dergelijks in het kader 2.0 te gebruiken, zou je nodig hebt om het zelf rewritte :) of zoek een soortgelijke van derden bibliotheek. Ik vond alleen een beetje informatie hier , maar het deed me ook niet overtuigd.

antwoordde op 05/08/2008 om 13:14
bron van user

stemmen
0

U kunt gebruik maken linqbridge voor .NET 2.0

antwoordde op 25/03/2015 om 20:05
bron van user

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