LINQ sur le runtime .NET 2.0

Translate

Une application activée LINQ peut-elle s'exécuter sur un ordinateur sur lequel seul le runtime .NET 2.0 est installé?

En théorie, LINQ n'est rien de plus que du sucre syntaxique, et le code IL résultant devrait ressembler à ce qu'il aurait dans .NET 2.0.

Comment puis-je écrire LINQ sans utiliser les bibliothèques .NET 3.5? Sera-t-il exécuté sur .NET 2.0?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Il existe des "Hacks" qui impliquent l'utilisation d'un System.Core.dll du Framework 3.5 pour le faire fonctionner avec .net 2.0, mais personnellement, je ne voudrais pas utiliser une base aussi fragile.

Vois ici:Prise en charge de LINQ sur .NET 2.0

  1. Créer une nouvelle application console
  2. Conserver uniquement System et System.Core comme assemblys référencés
  3. Définissez Copy Local sur true pour System.Core, car il n'existe pas dans .NET 2.0
  4. Utilisez une requête LINQ dans la méthode Main. Par exemple celui ci-dessous.
  5. Construire
  6. Copiez toute la sortie du bac sur une machine où seul .NET 2.0 est installé
  7. Courir

(Nécessite .net 2.0 SP1 et je n'ai aucune idée si le regroupement de System.Core.dll enfreint le CLUF)

La source
Translate

C'est bizarre que personne n'ait mentionnéLINQBridge. Ce petit projet génial est un backport de LINQ (IEnumerable, mais sans IQueryable) et de ses dépendances (Func, Action, etc.) vers .NET 2.0. Et:

Si votre projet fait référence à LINQBridge lors de la compilation, il se liera aux opérateurs de requête de LINQBridge; s'il fait référence à System.Core lors de la compilation, il se liera aux opérateurs de requête de Framework 3.5.

La source
Translate

En théorie, oui, à condition de distribuer les assemblys spécifiques LINQ et toutes les dépendances. Cependant, cela est en violation des licences de Microsoft. Scott Hanselman a écrit un article de blog surDéploiement d'ASP.NET MVC sur ASP.NET 2.0ce qui est similaire à ce que vous souhaitez faire.

La source
Translate

Vous pouvez utiliser les sources LINQ de mono (.NET pour Linux) pour exécuter LINQ sur .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

Quelqu'un l'a fait ici:
LINQ pour .NET 2.0

La source
Translate

Réponse courte:

  • LINQ to Objects: oui (IEnumerable<T>)
  • LINQ to SQL / Entities: non (IQueryable<T>)
  • LINQ to XML / DataSets: pas encore?

Voircette questionà propos des fonctionnalités .Net 3.5 disponibles automatiquement ou avec peu d'effort lorsque vous ciblez .Net 2.0 à partir de VS2008.

Fondamentalement, tout ce qui n'est que du «sucre de syntaxe» et les nouveaux compilateurs (C # 3.0, VB 9.0) émettent en tant qu'IL compatible 2.0 fonctionnera. Cela inclut de nombreuses fonctionnalités utilisées par LINQ telles que les classes anonymes, les lambdas en tant que délégués anonymes, les propriétés automatiques, les initialiseurs d'objet et les initialiseurs de collection.

Certaines fonctionnalités LINQ utilisent des classes, des interfaces, des délégués et des méthodes d'extension qui résident dans les nouveaux assemblys 3.5 (tels que System.Core.dll). La redistribution de ces assemblys est une violation de licence, mais ils pourraient être réimplémentés. L'utilisation de méthodes d'extension nécessite seulement de déclarer unSystem.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects repose surIEnumerable<T>extensions et plusieurs déclarations de délégués (lesAction<T>etFunc<T>familles) et ont été mis en œuvre dansLINQBridge(commemauschmentionné). LINQ to XML et LINQ to DataSets reposent sur LINQ to Objects qui, je suppose, pourrait également être implémenté pour .Net 2.0, mais je n'ai pas encore vu cela.

LINQ to SQL et LINQ to Entities nécessitent de nombreuses nouvelles classes (DataContext/ObjectContext, beaucoup d'attributs,EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc.) et les arbres d'expressions, qui, même s'ils sont réimplémentés d'une manière ou d'une autre, nécessiteront probablement au moins .Net 2.0 SP1 pour fonctionner.

La source
Translate

Je ne suis pas sûr de C #.

Je sais, cependant, que vous pouvez écrire du code VB LINNQ sans les bibliothèques 3.5 tant que vous utilisez le compilateur VS 2008 pour cibler le framework 2.0.

Vous devrez cependant implémenter vous-même certaines des méthodes LINQ.

LINQ utilise une transformation syntatique pour traduire les requêtes en code exécutable. Fondamentalement, il faudra un code comme celui-ci:

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

et convertissez-le en code comme ceci:

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

Pour la fonctionnalité LINQ fournie avec le framework 3.5, ces méthodes sont implémentées en tant que méthodes d'extension sur IEnumerable ou IQueryable (il existe également un tas de méthodes qui fonctionnent également sur des ensembles de données).

Les méthodes d'extension IEnumerable par défaut sont définies dans System.Linq.Enumerable et ressemblent à ceci:

<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

Les méthodes d'extension IQueryable prennent des arborescences d'expressions comme arguments, plutôt que des lambdas. Ils ressemblent à ceci:

 <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

Les versions de l'arborescence d'expression vous permettent d'obtenir une représentation arborescente des expressions fournies aux clauses qui peuvent ensuite être utilisées pour générer du code SQL (ou ce que vous voulez).

Vous pourriez probablement créer votre propre version de LINQ aux objets dans environ un jour. Tout est assez simple.

Si vous souhaitez utiliser DLINQ, les choses seraient un peu plus difficiles.

La source
Translate

Non, car alors que vous pensiez que LINQ n'était en réalité que du sucre syntaxique, il utilisait en fait beaucoup d'arbres d'expression - une fonctionnalité absente de .NET 2.0.

Cela étant dit .NET 3.5 ne se construit qu'au-dessus de .NET 2.0, et c'est la raison pour laquelle l'IL n'a pas l'air "différent" ou "spécial".

Je ne vois pas de raison pour laquelle vous ne devriez pas simplement installer le .NET 3.5 Framework. Tout .NET 2.0 fonctionnera bien dessus, promis :)

La source
Translate

Autant que je sache, la bibliothèque LINQ n'est disponible que depuis le framework 3.0. Si vous souhaitez utiliser quelque chose de similaire dans le framework 2.0, vous devrez le réécrire vous-même :) ou trouver une bibliothèque tierce similaire. Je n'ai trouvé que quelques informationsicimais cela ne m'a pas convaincu non plus.

La source
Translate

Vous pouvez utiliserLinqbridgepour .net 2.0

La source