.NET 2.0運行時的LINQ



3 Answers

沒人提到LINQBridge是很奇怪的。 這個小巧的項目是LINQ(IEnumerable,但沒有IQueryable)及其依賴(Func,Action等)到.NET 2.0的後端。 和:

如果您的項目在編譯期間引用LINQBridge,那麼它將綁定到LINQBridge的查詢運算符; 如果它在編譯期間引用System.Core,那麼它將綁定到Framework 3.5的查詢運算符。

Question

啟用LINQ的應用程序是否可以在僅安裝了.NET 2.0運行時的計算機上運行?

從理論上講,LINQ只不過是語法糖,而得到的IL代碼應該與.NET 2.0中的代碼相同。

如何在不使用.NET 3.5庫的情況下編寫LINQ? 它會在.NET 2.0上運行嗎?




您可以使用mono(Linux for Linux)中的LINQ源來在.NET 2.0上運行LINQ。

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

有人在這裡做過:
LINQ for .NET 2.0




據我所知,LINQ庫僅在框架3.0之後才可用。 如果你想在框架2.0中使用類似的東西,你需要自己重寫:)或者找一個類似的第三方庫。 我這裡只發現了一些信息但它也沒說服我。




我不確定C#。

但是,我知道,只要您使用VS 2008編譯器來定位2.0框架,就可以編寫VB LINNQ代碼。

但是,您必須實現一些自己的LINQ方法。

LINQ使用合成轉換將查詢轉換為可執行代碼。 基本上,它將採用這樣的代碼:

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

並將其轉換為如下代碼:

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

對於3.5框架附帶的LINQ功能,這些方法在IEnumerable或IQueryable上實現為擴展方法(還有一堆方法也適用於數據集)。

默認的IEnumerable擴展方法在System.Linq.Enumerable中定義,如下所示:

<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擴展方法將表達式樹作為參數,而不是lambdas。 它們看起來像這樣:

 <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

表達式樹版本使您能夠獲得提供給子句的表達式的樹形表示,然後可以使用這些表達式生成SQL代碼(或者您想要的任何其他內容)。

您可以在大約一天左右的時間內創建自己的LINQ對象版本。 這一切都很直接。

如果你想使用DLINQ,那麼事情會有點困難。




Related