Domanda

Può un LINQ abilitato applicazione eseguita su una macchina che ha solo l' .NET 2.0 runtime installato?

In teoria, LINQ non è altro che zucchero sintattico", e il conseguente IL codice dovrebbe essere lo stesso come sarebbe in .NET 2.0.

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

È stato utile?

Soluzione

Ci sono alcuni "Hack" che comportano l'utilizzo di un System.Core.dll da 3.5 Framework per funzionare con .net 2.0, ma personalmente non vorrei usare un po ' vaghe fondazione.

Vedi qui: Il supporto di LINQ su .NET 2.0

  1. Creare una nuova applicazione console
  2. Conservare soltanto di Sistema e di Sistema.Core come l'assembly di riferimento
  3. Impostare Copia Locale di vero per il Sistema.Core, perché non esiste .NET 2.0
  4. Utilizzare una query LINQ nel metodo Main.Per esempio quello di sotto.
  5. Costruire
  6. Copiare tutto il raccoglitore di uscita ad una macchina in cui solo .NET 2.0 è installato
  7. Eseguire

(Richiede .net 2.0 SP1 e non ho idea se la creazione di pacchetti System.Core.dll viola l'EULA)

Altri suggerimenti

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

Se il progetto fa riferimento LINQBridge durante la compilazione, quindi si legherà per LINQBridge query di operatori;se riferimenti di Sistema.Core durante di compilazione, quindi si legherà all' Framework 3.5 query di operatori.

In teoria sì, purché si distribuire il LINQ specifiche assemblee e le eventuali dipendenze.Tuttavia, che è in violazione di Microsoft licensing.Scott Hanselman ha scritto un post sul blog La distribuzione ASP.NET MVC su ASP.NET 2.0 che è simile a quello che si vuole fare.

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

Risposta breve:

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

Vedere questa domanda circa .Net 3.5 funzioni disponibili automaticamente o con un po ' di fatica durante la rivolta .Net 2.0 dal 2008.

Fondamentalmente, tutto ciò che è solo di sintassi "zucchero" e i nuovi compilatori C# 3.0, VB 9.0) emettono 2.0 è compatibile con IL lavoro.Questo include molte funzionalità utilizzato da LINQ come anonimo classi, lambda come delegati anonimi, proprietà automatico, gli inizializzatori di oggetto, e gli inizializzatori di raccolta.

Alcune funzionalità LINQ uso di classi, interfacce, delegati e i metodi di estensione che vivono nel nuovo 3.5 assemblee (come System.Core.dll).La ridistribuzione di queste assemblee è una violazione della licenza, ma potrebbero essere reintrodotto.Utilizzo di metodi di estensione bisogno solo che si dichiara un vuoto System.Runtime.CompilerServices.ExtensionAttribute.LINQ to Objects si basa su IEnumerable<T> estensioni e diversi delegato dichiarazioni (il Action<T> e Func<T> famiglie) e sono state implementate in LINQBridge (come mausch citato).LINQ to XML e LINQ to Dataset contare su LINQ to Objects, che credo potrebbe essere attuato anche per .Net 2.0, ma non ho visto questo fatto di sicurezza.

LINQ to SQL e LINQ to Entities richiedono molte nuove classi (DataContext/ObjectContext, un sacco di attributi, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc.) e strutture di espressione, che, anche se in qualche modo reimplementato, probabilmente richiederà almeno .Net 2.0 SP1 di lavoro.

Io non sono sicuro di C#.

So, tuttavia, che è possibile scrivere VB LINNQ codice w/fuori la 3.5 librerie come lungo come si utilizza il VS 2008 compilatore a destinazione il framework 2.0.

È, tuttavia, necessario implementare alcuni metodi LINQ la vostra auto.

LINQ utilizza un syntatic trasformazione di tradurre le query in un codice eseguibile.In sostanza, si avrà un 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à LINQ che viene fornito con il framework 3.5, tali metodi sono implementati come i metodi di estensione su entrambi i IQueryable o IEnumerable (c'è anche un sacco di metodi che operano su insiemi di dati troppo).

L'impostazione predefinita IEnumerable metodi di estensione definiti nel Sistema.Linq.Enumerabile 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

Il IQueryable metodi di estensione prendere espressioni alberi come argomenti, piuttosto che le espressioni lambda.Simile a questa:

 <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

La struttura ad albero dell'espressione versioni consentono di ottenere una rappresentazione ad albero delle espressioni forniti per le clausole che possono essere usati per generare il codice SQL (o quant'altro si voglia).

Probabilmente si potrebbe creare la propria versione di LINQ to objects in circa un giorno o così.È tutto abbastanza dritto in avanti.

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

No, perché mentre si pensava di LINQ è davvero solo "zucchero sintattico", è in realtà molto utilizzato espressione alberi-una caratteristica assente in .NET 2.0.

Detto questo .NET 3.5 solo costruisce sopra .NET 2.0, e che è il motivo per cui il non apparire "diversi" o "speciale".

Non vedo un motivo per cui non si deve solo installare il .NET Framework 3.5.Tutto .NET 2.0 funzionerà bene su di esso, una promessa :)

Per quanto ne so il LINQ biblioteca è disponibile solo quando il quadro è 3.0.Se si desidera utilizzare qualcosa di simile nel framework 2.0, è necessario rewritte te :) o trovare un simile libreria di terze parti.Ho trovato solo un po ' di informazioni qui ma non ha convinto me.

È possibile utilizzare linqbridge per .net 2.0

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top