LINQ on the.NET 2.0 Runtime

Czy aplikacja z włączoną obsługą LINQ może działać na komputerze, na którym zainstalowano tylko środowisko uruchomieniowe. NET 2.0?

W teorii, LINQ jest niczym innym jak cukrem składniowym, a wynikowy kod IL powinien wyglądać tak samo jak w. NET 2.0.

Jak mogę napisać LINQ bez użycia bibliotek. NET 3.5? Czy będzie działać na. Net 2.0?

Author: Keith, 2018-10-06

9 answers

Są pewne "hacki", które wymagają użycia systemu.Rdzeń.dll z frameworku 3.5, aby działał z. Net 2.0, ale osobiście nie chciałbym używać takiego nieco chwiejnego fundamentu.

Zobacz tutaj: wsparcie LINQ na. Net 2.0

  1. Utwórz nową aplikację konsolową
  2. Zachowaj tylko System i System.Core as referred assemblies
  3. Ustaw Copy Local na true dla systemu.Core, ponieważ nie istnieje w. NET 2.0
  4. Użyj zapytania LINQ w główną metodą. Na przykład Ten poniżej.
  5. Zbuduj
  6. skopiuj całe wyjście bin do komputera, na którym zainstalowana jest tylko. NET 2.0
  7. Run

(wymaga. NET 2.0 SP1 i nie mam pojęcia, czy systemRdzeń.dll narusza EULA)

 32
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 04:42:23

To dziwne, że nikt nie wspomniał LINQBridge . Ten mały niesamowity projekt jest backportem LINQ (IEnumerable, ale bez IQueryable) i jego zależności (Func, Action, etc) do.NET 2.0. Oraz:

Jeśli twój projekt odwołuje się do LINQBridge podczas kompilacji, wtedy będzie wiązać do operatorów zapytań LINQBridge; jeśli to system referencji.Rdzeń podczas kompilacji, wtedy będzie wiązać się z Framework 3.5 operatory zapytań.

 76
Author: Mauricio Scheffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-25 09:23:23

Teoretycznie tak, pod warunkiem, że dystrybuujesz specyficzne zestawy LINQ i wszelkie zależności. Jest to jednak naruszenie licencji Microsoftu. Scott Hanselman napisał wpis na blogu o ASP.NET MVC on ASP.NET 2.0 który jest podobny do tego, co chcesz zrobić.

 11
Author: John Downey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 12:07:46

Możesz użyć źródeł LINQ z mono (. NET dla Linuksa), aby uruchomić LINQ na. 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

Ktoś tu to zrobił:
LINQ dla. NET 2.0

 7
Author: Stefan Steiger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 10:30:03

Krótka odpowiedź:

  • LINQ do obiektów: tak (IEnumerable<T>)
  • LINQ do SQL / Entities: no (IQueryable<T>)
  • LINQ do XML / DataSets: jeszcze nie?

Zobacz to pytanie o funkcje. Net 3.5 dostępne automatycznie lub przy niewielkim wysiłku podczas targetowania.Net 2.0 od VS2008.

Zasadniczo wszystko, co jest tylko "cukrem składni" i nowe kompilatory (C# 3.0, VB 9.0) emitują jako IL kompatybilne z 2.0 będzie działać. To zawiera wiele funkcji używanych przez LINQ, takich jak klasy anonimowe, lambda jako anonimowe delegaty, właściwości automatyczne, inicjalizatory obiektów i inicjalizatory kolekcji.

Niektóre funkcje LINQ używają klas, interfejsów, delegatów i metod rozszerzeń, które żyją w nowych zestawach 3.5 (takich jak System.Rdzeń.dll). Redystrybucja tych zestawów jest naruszeniem licencji, ale można je ponownie wdrożyć. Używanie metod rozszerzeń wymaga tylko zadeklarowania pustej System.Runtime.CompilerServices.ExtensionAttribute. LINQ do obiektów opiera się na rozszerzeniach IEnumerable<T> i kilku deklaracjach delegatów (rodziny Action<T> i Func<T>) i zostały zaimplementowane w LINQBridge (Jak wspomniano mausch ). LINQ to XML i LINQ to DataSets opierają się na obiektach LINQ to, które mogą być również zaimplementowane dla. Net 2.0, ale jeszcze tego nie widziałem.

LINQ to sql i LINQ to Entities wymagają wielu nowych klas (DataContext/ObjectContext, wiele atrybutów, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, itp.) i drzew wyrazowych, które nawet jeśli w jakiś sposób reimplemented, prawdopodobnie będzie wymagać co najmniej. Net 2.0 SP1 do pracy.

 6
Author: Lucas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:58

Nie jestem pewien co do C#.

Wiem jednak, że możesz pisać kod VB LINNQ z bibliotekami 3.5 tak długo, jak używasz kompilatora VS 2008 do kierowania frameworku 2.0.

Będziesz jednak musiał zaimplementować niektóre metody LINQ samodzielnie.

LINQ używa transformacji syntaktycznej do tłumaczenia zapytań na kod wykonywalny. W zasadzie kod będzie taki:

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

I przekształcić go w kod w następujący sposób:

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

Dla LINQ funkcjonalność, która jest dostarczana z frameworkiem 3.5, metody te są zaimplementowane jako metody rozszerzeń na IEnumerable lub IQueryable(istnieje również kilka metod, które działają na zbiorach danych zbyt).

Domyślne metody rozszerzenia IEnumerable są zdefiniowane w systemie.Linq.Wyliczyć i wyglądać tak:

<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

IQueryable extension methods take expressions trees as arguments, a nie lambda. Wyglądają tak:

 <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

Wersje drzewa wyrażeń umożliwiają aby uzyskać reprezentację drzewa wyrażeń dostarczonych do klauzul, które mogą być następnie używane do generowania kodu SQL(lub cokolwiek innego chcesz).

Prawdopodobnie możesz stworzyć własną wersję LINQ to objects w mniej więcej dzień. Wszystko jest całkiem proste.

Jeśli chcesz użyć DLINQ, wtedy sprawy będą nieco trudniejsze.

 5
Author: Scott Wisniewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 21:30:37

Nie, ponieważ chociaż myślałeś, że LINQ jest tak naprawdę tylko cukrem składniowym, to w rzeczywistości mocno wykorzystywał drzewa wyrażeń - funkcję nieobecną w. NET 2.0.

To jest powiedziane. NET 3.5 tylko buduje się na szczycie. NET 2.0, i to jest powód, dla którego IL nie wygląda "inaczej " lub"specjalne".

Nie widzę powodu, dla którego nie powinieneś po prostu instalować. NET 3.5 Framework. Wszystko. NET 2.0 będzie na nim dobrze działać, obiecuję:)

 3
Author: Jon Limjap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 12:07:39

Z tego co wiem biblioteka LINQ jest dostępna dopiero od frameworka 3.0. Jeśli chcesz użyć czegoś podobnego w frameworku 2.0, musisz to sam przepisać:) lub znaleźć podobną bibliotekę innej firmy. Znalazłem tylko trochę informacji tutaj ale mnie to też nie przekonało.

 2
Author: jdecuyper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 12:14:33

Możesz użyć linqbridge dla. Net 2.0

 0
Author: BrettWatts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-25 20:05:40