LINQ na .NET 2.0 Runtime

głosy
53

Czy LINQ włączony bieg aplikacji na komputerze, który ma zainstalowany tylko runtime .NET 2.0?

W teorii LINQ jest niczym więcej niż cukier składniowej, a otrzymany kod IL powinny wyglądać tak samo, jak byłoby to w .NET 2.0.

Jak mogę napisać LINQ bez korzystania z bibliotek .NET 3.5? To będzie działać na .NET 2.0?

Utwórz 05/08/2008 o 13:03
źródło użytkownik
W innych językach...                            


9 odpowiedzi

głosy
76

To dziwne, że nikt nie wspomniał LINQBridge . Ten projekt jest trochę niesamowite backportu LINQ (IEnumerable, ale bez IQueryable) i jego zależności (FUNC, akcja, etc) dla .NET 2.0. I:

Jeśli projekt odwołuje LINQBridge podczas kompilacji, a następnie będzie wiązać się z operatorów zapytań LINQBridge za; jeśli odwołuje System.Core podczas kompilacji, a następnie będzie wiązać się z operatorów zapytań Framework 3.5 za.

Odpowiedział 27/12/2008 o 03:51
źródło użytkownik

głosy
32

Istnieje kilka „Hacks”, które wiążą się z użyciem System.Core.dll od 3,5 ram, aby go uruchomić z .NET 2.0, ale osobiście nie chciałbym użyć takiego nieco chwiejny fundament.

Zobacz tutaj: LINQ wsparcia w .NET 2.0

  1. Utwórz nową aplikację konsoli
  2. Przechowywać wyłącznie System i System.Core jako zespoły odwołuje
  3. Ustaw Kopia lokalna true dla System.Core, ponieważ nie istnieje w .NET 2.0
  4. Użyć kwerendy LINQ w metodzie Main. Na przykład jeden poniżej.
  5. Budować
  6. Skopiować wszystkie dane wyjściowe bin na komputerze, na którym jest zainstalowany .NET 2.0 tylko
  7. Biegać

(Wymaga .NET 2.0 SP1 i nie mam pojęcia, czy łączenie się System.Core.dll łamie EULA)

Odpowiedział 05/08/2008 o 13:07
źródło użytkownik

głosy
11

Teoretycznie tak, pod warunkiem, że rozpowszechnianie LINQ konkretne zespoły i żadnych zależności. Jednak to z naruszeniem licencji firmy Microsoft. Scott Hanselman napisał na blogu o Wdrażanie ASP.NET MVC w ASP.NET 2.0 , który jest podobny do tego, co chce zrobić.

Odpowiedział 05/08/2008 o 13:07
źródło użytkownik

głosy
7

Można użyć źródła LINQ z mono (.NET dla Linuksa), aby uzyskać LINQ działa 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ś zrobił to tutaj:
LINQ dla .NET 2.0

Odpowiedział 04/03/2011 o 19:51
źródło użytkownik

głosy
6

Krótka odpowiedź:

  • LINQ to Objects: tak ( IEnumerable<T>)
  • LINQ to SQL / podmioty: brak ( IQueryable<T>)
  • LINQ to XML / DataSet: jeszcze nie?

Zobacz to pytanie o .NET 3.5 funkcji dostępnych automatycznie lub przy niewielkim wysiłku, kiedy targetting .NET 2.0 z VS2008.

W zasadzie wszystko, co jest tylko „cukier składni”, a nowe kompilatory (C # 3.0, VB 9.0) emitują jak 2,0-kompatybilny IL zadziała. Obejmuje wiele funkcji używanych przez LINQ takich jak anonimowych klas, lambdas anonimowy delegatów, właściwości automatycznych, inicjatorów obiektu i inicjalizatorów zbiórki.

Niektóre funkcje LINQ użyć klas, interfejsów, delegaci i metod rozszerzeń, które żyją w nowych zespołach 3,5 (takich jak System.Core.dll). Rozprowadzanie tych zespołów jest naruszeniem licencji, ale może być przepisany. Stosując metody przedłużania wystarczy że zadeklarujesz pusty System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects opiera się na IEnumerable<T>przedłużenie i kilku deklaracji delegata (te Action<T>i Func<T>rodzin) i zostały wdrożone w LINQBridge (jak mausch wspomniano). LINQ to XML i LINQ to DataSet polegać na LINQ to Objects co chyba może być również realizowany dla .NET 2.0, ale nie widziałem jeszcze tego zrobić.

LINQ to SQL i LINQ do podmiotów wymaga wiele nowych klas ( DataContext/ ObjectContext, wiele atrybutów EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc) i drzew, które, nawet jeśli w jakiś sposób przepisany, będzie prawdopodobnie wymagało przynajmniej .NET 2.0 SP1 pracować wyrażenie.

Odpowiedział 19/05/2009 o 17:19
źródło użytkownik

głosy
5

Nie jestem pewien o C #.

Wiem jednak, że można napisać kod VB LINNQ w / OUT 3,5 bibliotek tak długo jak używasz kompilator VS 2008 do kierowania ramy 2.0.

Będziesz jednak trzeba zaimplementować niektóre z metod LINQ siebie.

LINQ używa syntatic transformację do tłumaczenia zapytań do kodu wykonywalnego. Zasadniczo, to zajmie kod jak poniżej:

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

i przekształcić go w kodzie jak poniżej:

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

Dla funkcjonalności LINQ, że statki o 3,5 ram, metody te są implementowane jako metody wewnętrznych na albo IEnumerable lub IQueryable (tam też grono metod, które pracują na danych ustawia zbyt).

Domyślne IEnumerable rozszerzenie metod są zdefiniowane w System.Linq.Enumerable 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

W IQueryable rozszerzenie metod wziąć wyrażeń drzew jako argumenty, zamiast 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żenie pozwalają uzyskać reprezentację drzewa wyrażeń określonych klauzul, które mogą być następnie wykorzystywane do generowania kodu SQL (czy co tam jeszcze chcesz).

Prawdopodobnie może stworzyć swoją własną wersję LINQ do obiektów w około dzień lub dwa. To wszystko jest bardzo proste.

Jeśli chcesz użyć DLINQ, wtedy wszystko będzie trochę trudniej.

Odpowiedział 10/10/2008 o 22:30
źródło użytkownik

głosy
3

Nie, ponieważ podczas myślał LINQ jest naprawdę po prostu cukier syntaktyczny, to faktycznie ciężko używane wyrażenia drzew - funkcja nieobecny w .NET 2.0.

Mając na uwadze powyższe .NET 3.5 opiera się tylko na górze .NET 2.0, i to jest powód, dlaczego IL nie wygląda „inny” lub „specjalne”.

Nie widzę powodu, dlaczego nie należy po prostu zainstalować .NET 3.5 Framework. Wszystko .NET 2.0 będzie działać dobrze na nim, obiecuję :)

Odpowiedział 05/08/2008 o 13:07
źródło użytkownik

głosy
2

O ile wiem, biblioteka LINQ jest dostępna tylko od ram 3.0. Jeśli chcesz użyć czegoś podobnego w ramach 2.0, trzeba by go rewritte siebie :) lub znaleźć podobne biblioteki innej firmy. I tylko znaleźć trochę informacji tutaj , ale nie przekonał mnie obaj.

Odpowiedział 05/08/2008 o 13:14
źródło użytkownik

głosy
0

Można użyć linqbridge dla .NET 2.0

Odpowiedział 25/03/2015 o 20:05
źródło użytkownik

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