假如你已经喜欢上LINQ,并且已经离不开它,一写代码就会用到扩展方法,Lambda表达式和LINQ;但是恰恰,你无法说服你的客户的机器上都装上.NET 3.5,这时候怎么办呢?这时候,LINQBridge可以让你的问题迎刃而解。
LINQBridge是《C# 3.0 in a Nutshell》的作者开发的一个程序集,它重新实现了.NET 3.5中所有标准的查询操作,以及泛型的Func和Action代理(delegate);通过利用VS2008的多定向(multi-targeting)特性,大家就可以在VS2008中使用C# 3.0的语法编写运行于.NET 2.0上的程序了。LINQBridge支持扩展方法、Lambda表达式和LINQ的基本语法(只能操作LINQ to Objects)。
LINQBridge的工作原理是基于以下几个技术:
- .NET 3.5的CLR还是CLR 2.0,.NET 3.5只是添加一些额外的程序集,以及C# 3.0的编译器(主要针对一些新的语法)
- 在VS 2008中,不管把target设定为那个版本的.NET,都是使用C# 3.0的编译器(对此,我以前有随笔谈到过,在.NET 2.0中还是直接能用自动属性)
- C# 3.0的新特性其实是基于泛型和匿名代理的基础上的
要使用LINQBridge,其实很简单,首先建立一个.NET 2.0的项目,或者把目标框架(Target Framework)改为.NET 2.0;然后把LINQBridge.dll引用进来;最后在代码文件中添加相应的命名空间(LINQBridge使用的命名空间和System.Core的一样),就可以编写LINQ代码了。
以后,如果你要升级你的运行环境到.NET 3.5,只需要把LINQBridge的引用替换为System.Core就行了。无需更改任何代码。
如果,程序运行的目标机器上安装了.NET 3.5的话,使用LINQBridge也不会产生任何冲突。
上面谈到的都是要基于VS 2008来开发,当然在C# 2.0和VS 2005中还是可以使用LINQBridge的,但是没有了扩展方法、Lambda表达式和查询语法,查询操作的编写将变得非常笨拙。
LINQBridge不仅对于无法马上部署.NET 3.5的客户机器有用,对于ASP.NET的程序也同样有用,比如你现在拥有一个ASP.NET 2.0空间,但是希望使用新的C# 3.0语法。不过由于LINQBridge不支持LINQ to SQL,所以要访问数据库的话,只有使用其他数据访问技术,如LINQ to NHibernate、LINQ to LLBLGen或LINQ to DB4O等。
LINQBridge是免费使用的,并提供源代码。下载地址和英文详细说明为:http://www.albahari.com/nutshell/linqbridge.html