LINQ auf .NET 2.0 Runtime

stimmen
53

Kann ein LINQ aktiviert auf einer Maschine App laufen, dass nur die .NET 2.0 Runtime installiert ist?

In der Theorie ist LINQ nichts anderes als syntaktischer Zucker, und der resultierende IL-Code sollte gleich aussehen, wie es in .NET 2.0 haben würde.

Wie kann ich LINQ schreiben, ohne die .NET 3.5 Bibliotheken zu verwenden? Wird es auf .NET 2.0 laufen?

Veröffentlicht am 05/08/2008 um 13:03
quelle vom benutzer
In anderen Sprachen...                            


9 antworten

stimmen
76

Es ist seltsam , dass niemand erwähnt hat LINQBridge . Dieses kleine genial Projekt ist eine Rückportierung von LINQ (IEnumerable, aber ohne IQueryable) und ihre Abhängigkeiten (Func, Action, usw.) zu .NET 2.0. Und:

Wenn Ihr Projekt LINQBridge während der Kompilierung verweist, dann wird es zu LINQBridge Abfrage Betreiber binden; wenn es System.Core während der Kompilierung verweist, dann binden Sie es an Framework 3.5 Abfrage Operatoren.

Beantwortet am 27/12/2008 um 03:51
quelle vom benutzer

stimmen
32

Es gibt einige „Hacks“, die eine System.Core.dll aus dem 3.5 Framework beinhalten mit, um es mit .net 2.0 laufen zu lassen, aber ich persönlich würde nicht wollen, verwenden eine solche etwas wackeligen Fundament.

Siehe hier: LINQ - Unterstützung auf .NET 2.0

  1. Erstellen Sie eine neue Konsolenanwendung
  2. Halten Sie nur System und System.Core als referenzierten Assemblys
  3. Set Copy Local auf true für System.Core, weil es nicht in .NET existiert 2.0
  4. Verwenden Sie eine LINQ-Abfrage in der Main-Methode. Für die ein Beispiel unten.
  5. Bauen
  6. Kopieren Sie alle bin Ausgang an einen Computer, auf dem nur .NET 2.0 installiert ist
  7. Lauf

(Benötigt das .NET 2.0 SP1 und ich habe keine Ahnung, ob die System.Core.dll Bündelung des EULA verstößt)

Beantwortet am 05/08/2008 um 13:07
quelle vom benutzer

stimmen
11

Theoretisch ja, vorausgesetzt , verteilen Sie die LINQ spezifische Baugruppen und alle Abhängigkeiten. Jedoch ist , dass eine Verletzung von Microsoft-Lizenzierung. Scott Hanselman hat einen Blog - Post über Bereitstellen von ASP.NET MVC auf ASP.NET 2.0 , die ähnlich ist , was Sie tun wünschen.

Beantwortet am 05/08/2008 um 13:07
quelle vom benutzer

stimmen
7

Sie können die LINQ Quellen von Mono (.NET für Linux) verwenden LINQ auf .NET 2.0 zum Laufen zu bekommen.

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

Jemand hat es hier getan:
LINQ for .NET 2.0

Beantwortet am 04/03/2011 um 19:51
quelle vom benutzer

stimmen
6

Kurze Antwort:

  • LINQ to Objects: ja ( IEnumerable<T>)
  • LINQ to SQL / Entities: nein ( IQueryable<T>)
  • LINQ to XML / Datasets: noch nicht?

Sehen Sie diese Frage zu .Net 3.5 verfügbaren Funktionen automatisch oder mit wenig Aufwand , wenn .Net 2.0 von VS2008 Targeting.

Im Grunde genommen alles, was nur „Syntax Zucker“ und die neuen Compilern (C # 3.0, VB 9.0) ist emittieren als 2.0-kompatibel IL arbeiten. Dazu gehören viele Features von LINQ wie anonyme Klassen, Lambdas als anonyme Teilnehmer, automatische Eigenschaften, Objektinitialisierer verwendet, und Auflistungsinitialisierer.

Einige LINQ Eigenschaften von Klassen, Schnittstellen, Delegaten und Erweiterungsmethoden , die in den neuen 3,5 - Baugruppen (wie System.Core.dll) leben. Umverteilen diese Baugruppen ist eine Lizenzverletzung, aber sie können neu implementiert werden. Mit Erweiterungsmethoden müssen nur , dass Sie eine leere erklären System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects verlässt sich auf IEnumerable<T>Erweiterungen und mehrere Delegierte Erklärungen (die Action<T>und Func<T>Familien) und haben in realisiert LINQBridge (als Mausch erwähnt). LINQ to XML und LINQ to Datasets setzen auf LINQ to Objects , die ich auch für .NET 2.0 implementiert werden erraten konnte, aber ich habe das noch nicht getan gesehen.

LINQ to SQL und LINQ to Entities erfordern viele neue Klassen ( DataContext/ ObjectContext, viele Attribute, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, usw.) und Ausdrucksbäume, die, auch wenn irgendwie neu implementiert, wahrscheinlich zumindest erfordert .Net 2.0 SP1 zu arbeiten.

Beantwortet am 19/05/2009 um 17:19
quelle vom benutzer

stimmen
5

Ich bin über C # nicht sicher.

Ich weiß aber, dass Sie VB LINNQ Code w / out die 3.5-Bibliotheken so lange schreiben können, wie Sie den VS 2008-Compiler verwenden, um das 2.0-Framework abzielen.

Sie haben jedoch einige der LINQ Methoden, um sich selbst zu implementieren.

LINQ verwendet eine Syntatic Transformation Abfragen in ausführbaren Code zu übersetzen. Grundsätzlich wird es Code wie folgt erfolgen:

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

und wandeln es in Code wie folgt aus:

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

Für die LINQ-Funktionalität, die Schiffe mit dem 3,5 Rahmen, werden diese Methoden als Erweiterungsmethoden implementiert entweder IEnumerable oder IQueryable (es gibt auch eine Reihe von Methoden, die auf Daten arbeiten zu Sets).

Die Standard IEnumerable Erweiterungsmethoden sind in System.Linq.Enumerable definiert und wie folgt aussehen:

<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

Die IQueryable Erweiterungsmethoden nehmen Ausdrücke Bäume als Argumente, anstatt lambdas. Sie sehen wie folgt aus:

 <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

Die Ausdrucksbaum Versionen können Sie eine Baumdarstellung der Ausdrücke zu den Klauseln zur Verfügung gestellt bekommen, die dann verwendet werden können, SQL-Code zu generieren (oder was auch immer, was Sie wollen).

Sie könnten wahrscheinlich Ihre eigene Version von LINQ zu Objekten in etwa einem Tag erstellen oder so. Es ist alles ziemlich geradlinig.

Wenn Sie DLINQ verwenden möchten, dann würde die Dinge ein wenig schwieriger.

Beantwortet am 10/10/2008 um 22:30
quelle vom benutzer

stimmen
3

Nein, denn während Sie LINQ gedacht ist wirklich nur syntaktischer Zucker, es tatsächlich stark frequentierten Ausdrucksbäume - ein Feature in Abwesenheit .NET 2.0.

Davon abgesehen baut .NET 3.5 nur auf den .NET 2.0, und das ist der Grund, warum die IL nicht „anders“ oder „special“ aussehen.

Ich sehe keinen Grund, warum Sie sollten nicht nur die .NET 3.5 Framework installieren. Alles .NET 2.0 wird auf sie gut funktionieren, versprechen :)

Beantwortet am 05/08/2008 um 13:07
quelle vom benutzer

stimmen
2

Soweit ich die LINQ - Bibliothek kennen , ist erst seit dem Framework 3.0 zur Verfügung. Wenn Sie etwas ähnliches im Rahmen verwenden möchten , 2.0, müssten Sie es rewritte selbst :) oder ein ähnliches Fremd Bibliothek. Ich fand nur ein paar Informationen hier , aber es hat mich auch nicht überzeugt.

Beantwortet am 05/08/2008 um 13:14
quelle vom benutzer

stimmen
0

Sie können mit linqbridge für .net 2.0

Beantwortet am 25/03/2015 um 20:05
quelle vom benutzer

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