LINQ sur le .NET 2.0 Runtime

voix
53

Est-ce qu'un LINQ a permis l'exécution de l'application sur une machine qui n'a que le temps d'exécution .NET 2.0 est installé?

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

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

Créé 05/08/2008 à 13:03
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
76

Il est étrange que personne ne l' a mentionné LINQBridge . Ce petit projet impressionnant est un backport de LINQ (IEnumerable, mais sans IQueryable) et ses dépendances (Func, action, etc.) à .NET 2.0. Et:

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

Créé 27/12/2008 à 03:51
source utilisateur

voix
32

Il y a quelques « Hacks » qui impliquent l'utilisation System.Core.dll du Framework 3.5 pour le faire fonctionner avec .net 2.0, mais personnellement je ne voudrais pas utiliser une telle base un peu fragile.

Voir ici: support LINQ sur .NET 2.0

  1. Créer une nouvelle application console
  2. Conserver uniquement du système et System.Core sous forme d'ensembles référencés
  3. Définition d'une copie locale sur true pour System.Core, car il n'existe pas dans .NET 2.0
  4. Utiliser une requête LINQ dans le procédé principal. Par exemple celui ci-dessous.
  5. Construire
  6. Copiez tous la sortie du bac à une machine où seulement .NET 2.0 est installé
  7. Courir

(Nécessite .net 2.0 SP1 et je ne sais pas si le regroupement System.Core.dll viole le CLUF)

Créé 05/08/2008 à 13:07
source utilisateur

voix
11

En théorie oui, à condition que vous diffusez les ensembles spécifiques LINQ et toutes les dépendances. Cependant ce qui est en violation de la licence de Microsoft. Scott Hanselman a écrit un blog sur Déploiement ASP.NET MVC sur ASP.NET 2.0 qui est similaire à ce que vous voulez faire.

Créé 05/08/2008 à 13:07
source utilisateur

voix
7

Vous pouvez utiliser les sources LINQ de mono (.NET pour Linux) pour obtenir LINQ en cours d'exécution 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

Créé 04/03/2011 à 19:51
source utilisateur

voix
6

Réponse courte:

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

Voir cette question à propos de .Net 3.5 fonctionnalités disponibles automatiquement ou avec peu d' effort quand .Net 2.0 de ciblage VS2008.

En gros, tout ce qui est seulement « sucre syntaxique » et les nouveaux compilateurs (C # 3.0, VB 9.0) émette comme 2.0 compatible IL fonctionnera. Cela inclut de nombreuses fonctionnalités utilisées par LINQ telles que les classes anonymes, lambdas comme délégués anonymes, propriétés automatiques, initialiseurs d'objets et initialiseurs de collection.

Certaines fonctionnalités LINQ utilisent des classes, des interfaces, des délégués et des méthodes d'extension qui vivent dans les nouveaux ensembles 3.5 (comme System.Core.dll). Ces assemblées est la redistribution d' une violation de licence, mais ils pourraient être réimplémentée. En utilisant des méthodes d'extension ont besoin seulement que vous déclarez un vide System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects repose sur des IEnumerable<T>extensions et plusieurs déclarations de délégués (les Action<T>et Func<T>familles) et ont été mises en œuvre dans LINQBridge (comme mausch mentionné). LINQ to XML et LINQ à DataSets compter sur LINQ aux objets que je suppose pourrait également être mis en œuvre pour .Net 2.0, mais je n'ai pas vu cela encore.

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' expression, qui, même si en quelque sorte réimplémentée, nécessitera probablement au moins .Net 2.0 SP1 pour travailler.

Créé 19/05/2009 à 17:19
source utilisateur

voix
5

Je ne suis pas sûr de C #.

Je ne sais, cependant, que vous pouvez écrire du code VB LINNQ w / les 3,5 bibliothèques aussi longtemps que vous utilisez le compilateur VS 2008 pour cibler le cadre 2.0.

Vous, cependant, doivent mettre en œuvre certaines des méthodes LINQ votre auto.

LINQ utilise une transformation syntactique pour traduire les requêtes en code exécutable. En gros, il faudra code comme ceci:

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

et le convertir en code comme ceci:

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

Pour la fonctionnalité LINQ livré avec le cadre 3.5, ces méthodes sont mises en œuvre des méthodes d'extension de chaque IEnumerable ou IQueryable (il y a aussi un tas de méthodes qui fonctionnent sur des ensembles de données aussi).

La valeur par défaut IEnumerable méthodes d'extension 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 expressions arbres comme arguments, plutôt que 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 d'arbres d'expression permettent d'obtenir une représentation arborescente des expressions fournies aux clauses qui peuvent ensuite être utilisés pour générer du code SQL (ou ce que ce que vous voulez).

Vous pourriez probablement créer votre propre version de LINQ aux objets d'un jour ou deux. Il est tout assez simple.

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

Créé 10/10/2008 à 22:30
source utilisateur

voix
3

Non, parce que pendant que vous pensiez LINQ est vraiment juste du sucre syntaxique, il arborescences d'expression en fait très utilisés - une fonctionnalité absente dans .NET 2.0.

Cela étant dit NET 3.5 builds que sur le dessus de .NET 2.0, et c'est la raison pour laquelle l'IL ne semble pas « différent » ou « spécial ».

Je ne vois pas une raison pour laquelle vous ne devriez pas il suffit d'installer le .NET Framework 3.5. Tout .NET 2.0 fonctionnera bien sur elle, la promesse :)

Créé 05/08/2008 à 13:07
source utilisateur

voix
2

Pour autant que je sais que la bibliothèque LINQ est disponible depuis le cadre 3.0. Si vous voulez utiliser quelque chose de similaire dans le cadre 2.0, vous devez vous il rewritte :) ou trouver une bibliothèque similaire tiers. Je ne ai trouvé un peu d'information ici , mais il ne m'a pas convaincu non plus .

Créé 05/08/2008 à 13:14
source utilisateur

voix
0

Vous pouvez utiliser linqbridge pour .net 2.0

Créé 25/03/2015 à 20:05
source utilisateur

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