LINQ na Runtime .NET 2.0

hlasů
53

Může LINQ povolen aplikace běží na počítači, který má nainstalovaný jen runtime .NET 2.0?

V teorii, LINQ není nic víc než syntaktický cukr, a výsledná IL kód by měl vypadat stejně jako to by mělo v .NET 2.0.

Jak mohu psát LINQ bez použití knihoven .NET 3.5? Bude to běh na .NET 2.0?

Položena 05/08/2008 v 13:03
zdroj uživatelem
V jiných jazycích...                            


9 odpovědí

hlasů
76

Je to zvláštní, že nikdo nezmínil LINQBridge . Tento malý úžasné projekt je portovat z LINQ (IEnumerable, ale bez IQueryable) a jeho závislosti (Func, Akční, atd) na .NET 2.0. A:

Pokud váš projekt odkazuje LINQBridge při kompilaci, pak to bude vázat na operátory dotazu LINQBridge své; pokud se odkazuje System.Core při kompilaci, pak to bude vázat na provozovatele Framework 3.5 v dotazu.

Odpovězeno 27/12/2008 v 03:51
zdroj uživatelem

hlasů
32

Tam jsou některé „Hacks“, které zahrnují použití System.Core.dll z Framework 3.5, aby to běžet s .NET 2.0, ale osobně bych nechtěl používat takové poněkud roztřeseně základ.

Viz zde: LINQ podporu na .NET 2.0

  1. Vytvoření nové aplikace konzoly
  2. Zachovat pouze systém a System.Core jako odkazované sestavy
  3. Nastavte Místní kopie na hodnotu true pro System.Core, protože neexistuje v .NET 2.0
  4. Použít LINQ dotaz v metodě hlavní. Například jedna níže.
  5. Stavět
  6. Zkopírovat všechny výstupní přihrádky na počítači, kde je nainstalován pouze .NET 2.0
  7. Běh

(Vyžaduje NET 2.0 SP1 a nemám tušení, jestli svazování na System.Core.dll porušuje EULA)

Odpovězeno 05/08/2008 v 13:07
zdroj uživatelem

hlasů
11

Teoreticky ano, za předpokladu, distribuovat specifické sestavy LINQ a jakékoliv závislosti. Však, že je v rozporu s licencí Microsoft. Scott Hanselman napsal blog post o nasazení systému ASP.NET MVC na ASP.NET 2.0 , který je podobný tomu, co jste chtěl dělat.

Odpovězeno 05/08/2008 v 13:07
zdroj uživatelem

hlasů
7

Můžete použít zdroje LINQ z mono (.NET pro Linux), aby LINQ běží 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

Někdo to udělal tady:
LINQ for .NET 2.0

Odpovězeno 04/03/2011 v 19:51
zdroj uživatelem

hlasů
6

Stručná odpověď:

  • LINQ to Objects: ano ( IEnumerable<T>)
  • LINQ to SQL / subjekty: ne ( IQueryable<T>)
  • LINQ to XML / DataSets: Zatím ne?

Viz tuto otázku o .Net 3.5 dostupných funkcí automaticky, nebo s minimálním úsilím při cílení .Net 2.0 z VS2008.

V podstatě cokoliv, co je jen „syntax cukr“ a nové kompilátory (C # 3.0, VB 9.0) vydávat jako 2.0 kompatibilní s IL bude fungovat. To obsahuje mnoho funkcí používaných LINQ, jako je anonymní třídy, lambd jako anonymní delegátů, automatické vlastnosti, objekt Inicializátory a sběrných Inicializátory.

Některé funkce LINQ používat třídy, rozhraní, delegáti a prodlužovací metody, které žijí v nových 3,5 sestav (například System.Core.dll). Přerozdělení sestav je porušením licence, ale mohly by být reimplemented. Využívající metody rozšíření je třeba jen to, že jste deklarovat prázdný System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects opírá o IEnumerable<T>rozšíření a několik delegátů prohlášení (dále jen Action<T>a Func<T>rodiny) a byly realizovány v LINQBridge (jako mausch výše). LINQ to XML a LINQ to DataSets spoléhat na LINQ k objektům, které jsem hádat by mohla být také implementována pro .Net 2.0, ale já jsem neviděl to dělá dosud.

LINQ to SQL a LINQ to Subjekty vyžadují mnoho nových tříd ( DataContext/ ObjectContext, spousta atributů EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>atd) a exprese stromy, které, i když nějak reimplemented, bude pravděpodobně vyžadovat přinejmenším .Net 2.0 SP1 do práce.

Odpovězeno 19/05/2009 v 17:19
zdroj uživatelem

hlasů
5

Nejsem si jistý, o jazyce C #.

Vím však, že můžete psát VB LINNQ kód w / out na 3,5 knihoven tak dlouho, jak budete používat kompilátor VS 2008 zaměřit rámec 2.0.

Budete však muset implementovat některé z metod, LINQ vaše vlastní.

LINQ používá syntatic transformaci překládat dotazy do spustitelného kódu. V podstatě to bude trvat kód takto:

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

a převést jej do strojového kódu, jako je tento:

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

Pro funkčnost LINQ, který je dodáván s rámcem 3.5, tyto metody jsou implementovány jako rozšíření metod na buď IEnumerable nebo IQueryable (tam je také banda metod, které pracují na sad dat i).

Výchozí IEnumerable metody rozšíření jsou definovány v System.Linq.Enumerable a vypadat takto:

<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

Tyto IQueryable rozšíření metody brát výrazy stromy jako argumenty, spíše než lambd. Vypadají takto:

 <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

Verze výraz strom vám umožní získat stromovou reprezentaci výrazů poskytovaných doložek, které pak mohou být použity ke generování SQL kódu (nebo co vůbec ještě chcete).

Dalo by se pravděpodobně vytvořit svou vlastní verzi LINQ k objektům v asi jeden den, nebo tak. Je to všechno pěkně rovně dopředu.

Chcete-li použít DLINQ, pak to bude trochu složitější.

Odpovězeno 10/10/2008 v 22:30
zdroj uživatelem

hlasů
3

Ne, protože když jste si mysleli, LINQ je opravdu jen syntaktický cukr, ve skutečnosti často používají výraz stromy - funkce chybí v NET 2.0.

Jak již bylo řečeno .NET 3.5 staví jen na vrcholu .NET 2.0, a to je důvod, proč IL nevypadá „jiný“ nebo „zvláštní“.

Nevidím důvod, proč byste neměli jen nainstalovat NET Framework 3.5. Vše, .NET 2.0 bude fungovat dobře na tom, slibují :)

Odpovězeno 05/08/2008 v 13:07
zdroj uživatelem

hlasů
2

Pokud je mi známo, knihovna LINQ je k dispozici pouze od rámce 3.0. Chcete-li použít něco podobného v rámci 2.0, budete muset rewritte sami :), nebo najít podobný knihovnu třetí strany. Jen jsem našel nějaké informace zde ale to mě nepřesvědčila jeden.

Odpovězeno 05/08/2008 v 13:14
zdroj uživatelem

hlasů
0

Můžete použít linqbridge for .NET 2.0

Odpovězeno 25/03/2015 v 20:05
zdroj uživatelem

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