LINQ på .NET 2.0 Runtime

stemmer
54

Kan et LINQ aktivert app kjøres på en maskin som bare har .NET 2.0 runtime installert?

I teorien er LINQ noe mer enn syntaktisk sukker, og den resulterende IL-koden skal se det samme som det ville ha i .NET 2.0.

Hvordan kan jeg skrive LINQ uten å bruke .NET 3.5 bibliotekene? Vil det kjøres på .NET 2.0?

Publisert på 05/08/2008 klokken 12:03
kilden bruker
På andre språk...                            


9 svar

stemmer
76

Det er rart at ingen har nevnt LINQBridge . Denne lille kjempeflott prosjekt er en Backport av LINQ (IEnumerable, men uten IQueryable) og dets avhengigheter (Func, handling, etc) til .NET 2.0. Og:

Hvis prosjektet refererer LINQBridge under kompilering, så vil det binde seg til LINQBridge sin spørre operatører; hvis den refererer System.Core under kompilering, så vil det binde seg til Framework 3.5 er spør operatører.

Svarte 27/12/2008 kl. 02:51
kilden bruker

stemmer
32

Det er noen "Hacks" som innebærer bruk av en System.Core.dll fra 3,5 Framework for å gjøre det kjøres med .net 2.0, men personlig ville jeg ikke ønsker å bruke en slik en noe vaklende fundament.

Se her: LINQ support på .NET 2.0

  1. Opprett en ny konsoll applikasjon
  2. Hold bare System og System.Core som refererte forsamlinger
  3. Sett Kopier Lokal til sann for System.Core, fordi det ikke finnes i .NET 2.0
  4. Bruk en LINQ spørring i hovedmetode. For eksempel den nedenfor.
  5. Bygge
  6. Kopier alt bin utgang til en maskin der bare .NET 2.0 er installert
  7. Løpe

(Krever .NET 2.0 SP1, og jeg har ingen anelse om bunting System.Core.dll bryter EULA)

Svarte 05/08/2008 kl. 12:07
kilden bruker

stemmer
11

I teorien ja, forutsatt distribuere deg LINQ spesifikke forsamlinger og eventuelle avhengigheter. Men det er i strid med Microsofts lisensiering. Scott Hanselman skrev et blogginnlegg om distribusjon av ASP.NET MVC på ASP.NET 2.0 som ligner på det du ønsker å gjøre.

Svarte 05/08/2008 kl. 12:07
kilden bruker

stemmer
7

Du kan bruke LINQ kilder fra mono (.NET for Linux) for å få LINQ kjører på .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

Noen har gjort det her:
LINQ for .NET 2.0

Svarte 04/03/2011 kl. 18:51
kilden bruker

stemmer
6

Kort svar:

  • LINQ til objekter: ja ( IEnumerable<T>)
  • LINQ to SQL / enheter: ingen ( IQueryable<T>)
  • LINQ til XML / datasett: ikke ennå?

Se dette spørsmålet om .NET 3.5 funksjoner som er tilgjengelige automatisk eller med liten innsats når target Net 2.0 fra VS2008.

I utgangspunktet, noe som bare er "syntaks sukker" og de nye kompilatorer (C # 3.0, VB 9,0) avgir som 2.0-kompatibel IL vil fungere. Dette har mange funksjoner som brukes av LINQ som anonyme klasser, lambdaene som anonyme delegater, automatiske egenskaper, objekt initializers og innsamlings initializers.

Enkelte LINQ funksjoner bruker klasser, grensesnitt, delegater og skjøtemetoder som lever i de nye 3,5 sammenstillinger (for eksempel System.Core.dll). Omfordele disse samlingene er en lisens brudd, men de kunne reimplemented. Bruk av skjøtemetoder trenger bare at du deklarerer en tom System.Runtime.CompilerServices.ExtensionAttribute. LINQ til objekter avhengig av IEnumerable<T>utvidelser og flere delegere erklæringer (de Action<T>og Func<T>familier) og har blitt implementert i LINQBridge (som mausch nevnt). LINQ til XML og LINQ til datasett stole på LINQ til objekter som jeg tror kan også implementeres for .Net 2.0, men jeg har ikke sett dette gjort ennå.

LINQ to SQL og LINQ to Entities kreve mange nye klasser ( DataContext/ ObjectContext, mange attributter, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc) og uttrykk trær, som, selv om en eller annen måte reimplemented, vil trolig kreve minst Net 2.0 SP1 til å fungere.

Svarte 19/05/2009 kl. 16:19
kilden bruker

stemmer
5

Jeg er ikke sikker på om C #.

Jeg vet imidlertid at du kan skrive VB LINNQ kode w / ut de 3,5 bibliotekene så lenge du bruker VS 2008 kompilatoren å målrette 2.0 rammeverket.

Du vil imidlertid nødt til å gjennomføre noen av de LINQ metoder selv.

LINQ bruker en syntatic transformasjon å oversette spørsmål til kjørbar kode. I utgangspunktet vil det ta kode som dette:

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

og konvertere den til kode som dette:

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

For LINQ funksjonalitet som leveres med 3,5 rammeverket, er disse metodene implementeres som skjøtemetoder på enten IEnumerable eller IQueryable (det finnes også en haug med metoder som fungerer på data setter også).

Standard IEnumerable skjøtemetoder er definert i System.Linq.Enumerable og ser ut som dette:

<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 skjøtemetoder ta uttrykk trær som argumenter, snarere enn lambdaene. De ser ut som dette:

 <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

Uttrykket tre versjoner gjør at du kan få et tre representasjon av uttrykkene oppgitt til klausuler som deretter kan brukes til å generere SQL-kode (eller hva annet du vil).

Du kan sikkert lage din egen versjon av LINQ til objekter i om en dag eller så. Det er ganske rett frem.

Hvis du ønsker å bruke DLINQ, så ting ville være litt vanskeligere.

Svarte 10/10/2008 kl. 21:30
kilden bruker

stemmer
3

Nei, fordi mens du trodde LINQ er egentlig bare syntaktisk sukker, er det faktisk mye brukt uttrykk trær - en funksjon fraværende i .NET 2.0.

Det blir sagt .NET 3.5 bare bygger seg opp på toppen av .NET 2.0, og det er grunnen til at IL ikke ser "annerledes" eller "spesielle".

Jeg ser ikke en grunn til at du ikke bør bare installere .NET 3.5 Framework. Alt .NET 2.0 vil fungere fint på det, lover :)

Svarte 05/08/2008 kl. 12:07
kilden bruker

stemmer
2

Så vidt jeg vet LINQ biblioteket er kun tilgjengelig siden rammeverket 3.0. Hvis du ønsker å bruke noe lignende i Work 2.0, ville du trenger å rewritte det selv :) eller finne en tilsvarende tredjeparts bibliotek. Jeg fant bare en bit av informasjon her , men det gjorde ikke overbevist meg heller.

Svarte 05/08/2008 kl. 12:14
kilden bruker

stemmer
0

Du kan bruke linqbridge for .net 2.0

Svarte 25/03/2015 kl. 20:05
kilden bruker

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