61 votes

LINQ sur le .NET Runtime 2.0

Peut LINQ activé application de fonctionner sur une machine qui n'a que la .NET runtime 2.0 installé?

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

Comment puis-je écrire LINQ sans l'aide de l' .NET 3.5 bibliothèques? Peut-il fonctionner sur .NET 2.0?

82voto

Mauricio Scheffer Points 70470

C'est bizarre que personne n'a mentionné LINQBridge. Ce petit projet awesome est un rétroportage de LINQ (IEnumerable, mais sans IQueryable) et ses dépendances (Func, Action, etc) pour .NET 2.0. Et:

Si votre projet fait référence à LINQBridge lors de la compilation, alors il va se lier pour LINQBridge de opérateurs de requête; si elle Système de références.De base lors de compilation, puis il va se lier à Framework 3.5 est des opérateurs de requête.

34voto

Michael Stum Points 72046

Il y a quelques "Bidouilles" qui impliquent l'utilisation d'un System.Core.dll à partir de 3,5 Cadre pour le faire fonctionner avec .net 2.0, mais personnellement, je ne voudrais pas utiliser un peu fragile de la fondation.

Voir ici: LINQ appuyer sur .NET 2.0

  1. Créer une nouvelle application console
  2. Ne garder que le Système et le.De base comme les assemblys référencés
  3. Jeu de Copie Locale de vrai pour le Système.De base, car il n'existe pas .NET 2.0
  4. Utilisation d'une requête LINQ dans la méthode main. Par exemple celle ci-dessous.
  5. Construire
  6. Copier tous le bac de sortie à une machine où seulement .NET 2.0 est installé
  7. Exécuter

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

11voto

John Downey Points 6729

En théorie oui, à condition de distribuer le LINQ spécifique des assemblages et des dépendances. Cependant, cela est en violation de Microsoft en matière de concession de licences. Scott, Hanselman a écrit un billet de blog sur le Déploiement de ASP.NET MVC sur ASP.NET 2.0 qui est similaire à ce que vous êtes désireux de le faire.

7voto

Quandary Points 12867

Vous pouvez utiliser LINQ sources 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

Je l'ai fait ici:
LINQ pour .NET 2.0

6voto

Lucas Points 10415

Réponse courte:

  • LINQ to Objects: oui (IEnumerable<T>)
  • LINQ to SQL/Entités: n (IQueryable<T>)
  • LINQ to XML/ensembles de données: pas encore?


Voir cette question à propos de .Net 3.5 fonctionnalités disponibles automatiquement ou avec peu d'effort lors de la cibler .Net 2.0 à partir de VS2008.

En gros, tout ce qui n'est que "la syntaxe de sucre" et les nouveaux compilateurs (C# 3.0, VB 9.0) émettent 2.0-compatible IL va travailler. Cela comprend de nombreuses fonctionnalités utilisées par LINQ comme les anonymes, les classes, les lambdas comme délégués anonymes, automatique propriétés, les initialiseurs d'objets, et les initialiseurs de la collection.

Certains LINQ caractéristiques de l'utilisation des classes, des interfaces, des délégués et des méthodes d'extension qui vivent dans la nouvelle 3.5 assemblées (comme System.Core.dll). La redistribution de ces assemblées est une violation de licence, mais ils pourraient être réimplémentée. À l'aide de méthodes d'extension devez seulement que vous déclarez un vide System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects s'appuie sur IEnumerable<T> extensions et plusieurs délégué (déclarations de l' Action<T> et Func<T> des familles) et ont été mis en œuvre dans LINQBridge (comme mausch mentionné). LINQ to XML et LINQ to jeux de données s'appuient sur LINQ to Objects, qui je pense pourrait également être mis en œuvre pour .Net 2.0, mais je n'ai pas vu ce fait 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 des arbres d'expression, qui, même si d'une certaine façon réimplémentée, aura probablement besoin d'au moins .Net 2.0 SP1 de travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X