Vra

Kan'n LINQ enabled app loop op'n masjien wat net het die .NET 2.0 runtime geïnstalleer?

In teorie, LINQ is niks meer as sintaktiese suiker, en die gevolglike IL-kode moet dieselfde lyk as sou dit in .NET 2.0.

Hoe kan ek skryf LINQ sonder die gebruik van die .NETTO 3.5 biblioteke?Sal dit loop op .NET 2.0?

Was dit nuttig?

Oplossing

Daar is'n paar "Hacks" " dit behels die gebruik van'n System.Core.dll van 3.5 die Raamwerk te maak dit hardloop met .net 2.0, maar persoonlik sou ek nie wil gebruik so'n bietjie wankelrige fondasie.

Sien hier: LINQ ondersteuning op .NET 2.0

  1. Skep'n nuwe console aansoek
  2. Hou net-Stelsel en Stelsel.Kern as gekla gemeentes
  3. Stel Kopieer die Plaaslike te ware vir die Stelsel.Kern, omdat dit nie bestaan in .NET 2.0
  4. Gebruik'n LINQ navraag in die Belangrikste metode.Byvoorbeeld die een hieronder.
  5. Bou
  6. Kopieer al die bin uitvoer om'n masjien waar net .NET 2.0 is geïnstalleer
  7. Hardloop

(Vereis .net 2.0 SP1 en ek het geen idee as bundeling die System.Core.dll in stryd met die EULA)

Ander wenke

Dit is vreemd dat niemand het genoem LINQBridge . Hierdie klein ongelooflike projek is 'n backport van LINQ (IEnumerable, maar sonder IQueryable) en sy afhanklikes (funk, Aksie, ens) om NET 2.0. En:

  

As jou projek verwys na LINQBridge   tydens samestelling, dan sal dit bind   om LINQBridge se navraag operateurs; As dit   verwysings System.Core tydens   samestelling, dan sal dit bind aan   Raamwerk 3.5 se navraag operateurs.

In teorie ja, met dien verstande versprei jy die LINQ spesifieke gemeentes en enige afhanklikes. Maar dit is 'n skending van Microsoft se lisensie. Scott Hans Elman het 'n blog post oor implementering van ASP.NET MVC op ASP.NET 2.0 wat soortgelyk aan wat jy wil doen.

Jy kan die LINQ bronne van mono (NET vir Linux) gebruik om LINQ gang te kry 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 het dit hier gedoen:
LINQ vir NET 2.0

Kort antwoord:

  • LINQ om voorwerpe: Ja (IEnumerable<T>)
  • LINQ na SQL / Entiteite: geen (IQueryable<T>)
  • LINQ na XML / datastelle: nog nie

hierdie vraag oor Net 3,5 funksies wat beskikbaar is outomaties of met min moeite wanneer teikenmark het NET 2.0 van VS2008.

Eintlik is iets wat net "sintaksis suiker" en die nuwe opstellers (C # 3,0, VB 9.0) uitstraal as 2,0-versoenbaar IL sal werk. Dit sluit baie funksies wat deur LINQ soos anonieme klasse, lambdas as anonieme afgevaardigdes, outomatiese eienskappe, voorwerp initializers, en versameling initializers.

Sommige LINQ funksies gebruik klasse, interfaces, afgevaardigdes, en verlenging metodes wat in die nuwe 3.5 gemeentes woon (soos System.Core.dll). Herverdeling hierdie gemeentes is 'n lisensie skending, maar hulle kon reimplemented. Die gebruik van uitbreiding metodes moet net dat jy 'n leë System.Runtime.CompilerServices.ExtensionAttribute verklaar. LINQ om voorwerpe staatmaak op IEnumerable<T> uitbreidings en verskeie afgevaardigde verklarings (die Action<T> en Func<T> families) en het in LINQBridge (soos mausch genoem ). LINQ na XML en LINQ om datastelle staatmaak op LINQ na voorwerpe wat ek dink kan ook toegepas word vir NET 2.0, maar ek het nie gesien nog dit gedoen.

LINQ na SQL en LINQ te Entiteite vereis baie nuwe klasse (DataContext / ObjectContext, baie eienskappe, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, ens) en uitdrukking bome, wat, selfs al een of ander manier reimplemented, sal waarskynlik ten minste vereis. net 2,0 SP1 te werk.

Ek is nie seker oor C #.

Ek weet egter dat jy VB LINNQ kode kan skryf w / uit die 3.5 biblioteke so lank as wat jy die VS 2008 samesteller gebruik om teiken die 2,0 raamwerk.

U sal egter 'n paar van die LINQ metodes te implementeer jou self.

LINQ gebruik 'n syntatic transformasie om navrae te vertaal in uitvoerbare kode. Basies, sal dit code neem soos hierdie:

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

en omskep dit in kode soos volg:

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

Vir die LINQ funksies wat skepe met die 3,5 raamwerk, die metodes is as uitbreiding metodes op geïmplementeer óf IEnumerable of IQueryable (daar is ook 'n klomp van die metodes wat werk op datastelle te).

Die standaard IEnumerable uitbreiding metodes word gedefinieer in System.Linq.Enumerable en lyk:

<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

Die IQueryable uitbreiding metodes neem uitdrukkings bome as argumente, eerder as lambdas. Hulle lyk soos hierdie:

 <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

Die uitdrukking boom weergawes in staat stel om 'n boom voorstelling van die uitdrukkings wat aan die klousules wat dan gebruik kan word om SQL-kode (of wat ook al anders wat jy wil) te genereer kry.

Jy kan waarskynlik jou eie weergawe van LINQ om voorwerpe te skep oor 'n dag of so. Dit gaan alles redelik reguit vorentoe.

As jy wil DLINQ gebruik, dan dinge sou 'n bietjie moeiliker wees.

Nee, want terwyl jy dink LINQ is regtig net sintaktiese suiker, is dit eintlik baie gebruikte uitdrukking bome -. 'N funksie afwesig in NET 2.0

Dit gesê NET 3.5 bou net op die top van NET 2.0, en dit is die rede waarom die IL lyk nie "anders" of "spesiale".

Ek het nie 'n rede waarom jy moet nie net die NET 3.5 Framework te installeer sien. Alles NET 2.0 sal werk boete op dit, belofte:)

Sover ek weet die LINQ biblioteek is slegs beskikbaar sedert die raamwerk 3.0. As jy wil iets soortgelyks in die raamwerk 2.0 gebruik, sal jy nodig het om dit self te rewritte :) of 'n soortgelyke derdeparty-biblioteek. Ek het gevind dat net 'n bietjie van inligting hier maar dit het nie my óf oortuig.

Jy kan gebruik linqbridge vir NET 2.0

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top