LINQ sul runtime .NET 2.0

voti
53

Può un LINQ abilitato corsa applicazione su una macchina che solo ha installato il runtime .NET 2.0?

In teoria, LINQ non è altro che zucchero sintattico, e il codice IL risultante dovrebbe essere la stessa che avrebbe in .NET 2.0.

Come posso scrivere LINQ senza utilizzare le librerie .NET 3.5? Sarà eseguito su .NET 2.0?

È pubblicato 05/08/2008 alle 13:03
fonte dall'utente
In altre lingue...                            


9 risposte

voti
76

E 'strano che nessuno ha menzionato LINQBridge . Questo piccolo progetto impressionante è un backport di LINQ (IEnumerable, ma senza IQueryable) e le sue dipendenze (Func, azione, ecc) per .NET 2.0. E:

Se il progetto fa riferimento LINQBridge durante la compilazione, allora si legherà operatori di query di LINQBridge; se si fa riferimento a System.Core durante la compilazione, allora si legherà operatori di query Framework 3.5 di.

Risposto il 27/12/2008 a 03:51
fonte dall'utente

voti
32

Ci sono alcuni "hack" che coinvolgono utilizzando uno System.Core.dll dal Framework 3.5 per farlo funzionare con .net 2.0, ma personalmente non vorrei usare una fondazione come un po 'traballante.

Vedi qui: supporto LINQ su .NET 2.0

  1. Creare una nuova applicazione console
  2. Conservare soltanto del sistema e System.Core come assembly referenziati
  3. Impostare copia locale su true per System.Core, perché non esiste in .NET 2.0
  4. Utilizzare una query LINQ nel metodo Main. Per esempio quello sottostante.
  5. Costruire
  6. Copia tutto lo scomparto di uscita ad una macchina in cui è installato solo .NET 2.0
  7. Correre

(Richiede NET 2.0 SP1 e non ho idea se il bundling System.Core.dll viola l'EULA)

Risposto il 05/08/2008 a 13:07
fonte dall'utente

voti
11

In teoria sì, a patto di distribuire le assemblee specifiche LINQ e le dipendenze. Tuttavia questo è in violazione della licenza di Microsoft. Scott Hanselman ha scritto un post sul blog su Distribuzione di ASP.NET MVC in ASP.NET 2.0 , che è simile a quello che si vogliono fare.

Risposto il 05/08/2008 a 13:07
fonte dall'utente

voti
7

È possibile utilizzare le fonti di LINQ da mono (.NET per Linux) per ottenere LINQ in esecuzione su .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

Qualcuno ha fatto qui:
LINQ for .NET 2.0

Risposto il 04/03/2011 a 19:51
fonte dall'utente

voti
6

Risposta breve:

  • LINQ to Objects: sì ( IEnumerable<T>)
  • LINQ to SQL / Enti: no ( IQueryable<T>)
  • LINQ to XML / DataSet: Non ancora?

Vedere questa domanda su .NET 3.5 funzioni disponibili in modo automatico o con poco sforzo, quando rivolte a .Net 2.0 da VS2008.

In pratica, tutto ciò che è solo "lo zucchero sintassi" e le nuove compilatori (C # 3.0, VB 9.0) emettono come compatibile 2.0-IL funzionerà. Questo include molte caratteristiche utilizzate da LINQ come classi anonime, lambda come delegati anonimi, proprietà automatiche, inizializzatori oggetto e inizializzatori raccolta.

Alcune caratteristiche LINQ utilizzano classi, interfacce, delegati, e metodi di estensione che vivono nei nuovi complessi 3,5 (come System.Core.dll). Ridistribuzione queste assemblee è una violazione di licenza, ma potrebbero essere reimplementata. Utilizzo di metodi di estensione solo bisogno che si dichiara un vuoto System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects si basa su IEnumerable<T>estensioni e diverse dichiarazioni delegati (le Action<T>e Func<T>famiglie) e sono state implementate in LINQBridge (come mausch menzionato). LINQ to XML e LINQ to DataSet affidamento su LINQ to Objects che presumo che potrebbero essere attuate anche per .Net 2.0, ma non ho visto questo ancora finito.

LINQ to SQL e LINQ to Entities richiede molte nuove classi ( DataContext/ ObjectContext, un sacco di attributi, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, ecc) e alberi, che, anche se in qualche modo reimplementata, probabilmente richiederanno almeno .Net 2.0 SP1 per lavorare espressione.

Risposto il 19/05/2009 a 17:19
fonte dall'utente

voti
5

Non sono sicuro su C #.

So, però, che è possibile scrivere codice VB LINNQ w / le 3,5 librerie fino a quando si usa il compilatore VS 2008 di indirizzare il framework 2.0.

Sarà, tuttavia, è necessario implementare alcuni dei metodi di LINQ vostra auto.

LINQ utilizza una trasformazione syntatic di tradurre le query in codice eseguibile. In sostanza, ci vorrà il codice come questo:

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

e convertirlo in codice come questo:

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

Per la funzionalità di LINQ fornito con il framework 3.5, questi metodi vengono implementate come metodi di estensione su entrambi IEnumerable o IQueryable (c'è anche un sacco di metodi che lavorano su insiemi di dati troppo).

I metodi di estensione IEnumerable predefiniti sono definiti in System.Linq.Enumerable e simile a questa:

<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

I metodi di estensione IQueryable assumono espressioni alberi come argomenti, piuttosto che lambda. Sembrano questo:

 <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

Le versioni albero di espressione consentono di ottenere una rappresentazione ad albero delle espressioni di cui alle clausole che possono poi essere utilizzati per generare il codice SQL (o che mai altro che vuoi).

Probabilmente si può creare la propria versione di LINQ to Objects in circa un giorno o due. E 'tutto piuttosto semplice.

Se si desidera utilizzare DLINQ, allora le cose sarebbero un po 'più difficile.

Risposto il 10/10/2008 a 22:30
fonte dall'utente

voti
3

No, perché mentre si pensava LINQ è in realtà lo zucchero sintattico, ma alberi di espressione in realtà molto utilizzati - una caratteristica assente in .NET 2.0.

Detto .NET 3.5 costruisce solo fino in cima .NET 2.0, e questo è il motivo per cui l'IL non sembra "diverso" o "speciale".

Non vedo un motivo per cui non si dovrebbe installare il .NET Framework 3.5. Tutto NET 2.0 funzionerà benissimo su di essa, promettere :)

Risposto il 05/08/2008 a 13:07
fonte dall'utente

voti
2

Per quanto ne so la libreria LINQ è disponibile solo in quanto il quadro 3.0. Se si desidera utilizzare qualcosa di simile nel framework 2.0, si avrebbe bisogno di rewritte da soli :) o trovare una libreria di terze parti simili. Ho trovato solo un po 'di informazioni qui , ma non mi ha convinto neanche.

Risposto il 05/08/2008 a 13:14
fonte dall'utente

voti
0

È possibile utilizzare LINQBridge for .NET 2.0

Risposto il 25/03/2015 a 20:05
fonte dall'utente

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