魔法花园 - .NET版

我关于.NET技术的Blog

LINQBridge让你的LINQ代码可在.NET 2.0下运行

假如你已经喜欢上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的工作原理是基于以下几个技术:

  1. .NET 3.5的CLR还是CLR 2.0,.NET 3.5只是添加一些额外的程序集,以及C# 3.0的编译器(主要针对一些新的语法)
  2. 在VS 2008中,不管把target设定为那个版本的.NET,都是使用C# 3.0的编译器(对此,我以前有随笔谈到过,在.NET 2.0中还是直接能用自动属性)
  3. 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

posted on 2008-07-11 23:29 redmoon 阅读(1718) 评论(10)  编辑 收藏 所属分类: .NET 3.5

评论

#1楼  2008-07-11 23:34 RogerTong      

在Nant的Build中进行条件编译,针对不同的发行版引入不同的Dll应该更方便,就不用在项目文件中改来改去啦:)   回复  引用  查看    

#2楼 [楼主] 2008-07-11 23:39 redmoon      

@RogerTong
好主意。   回复  引用  查看    

#3楼  2008-07-11 23:45 构成 [未注册用户]

LINQ应该本来就可以Net2.0运行,不用装net3.5整个类库,添加System.Core等net3.5才有的引用时,选择复制到本地就可以了   回复  引用    

#4楼  2008-07-11 23:53 重典      

@构成
这篇文章是在vs2008推出以前发表的,当时的确很有用
不过之后就...同楼上了   回复  引用  查看    

#5楼  2008-07-11 23:54 Yes!加菲猫      

那个应该只是《C# 3.0 in a Nutshell》该书的作者为了方便我们认识linq运行机制而写的吧,如果硬要在ASP.NET 2.0空间下运行linq,那还不如用NHibernate来的直接。。。反正都是为了orm,没有必要为了linq而linq   回复  引用  查看    

#6楼  2008-07-12 00:18 deer.chao [未注册用户]

@Yes!加菲猫
linq和linq 2 sql不是同一个东西。   回复  引用    

#7楼  2008-07-12 08:05 阳春三月      

哈,楼主的文章真是及时雨啊,正在我对 Linq 爱不释手的时候,公司负责部署的同事抱怨客户不想装庞大的 .Net 3.5,问能不能退回到 .Net 2.0。这可真是个好东西,我马上试试。

谢谢!   回复  引用  查看    

#8楼  2008-07-12 09:17 zeus2      

添加System.Core就行运行了。不需要安装3.5的库的   回复  引用  查看    

#9楼  2008-07-12 11:38 SAPikachu [未注册用户]

LINQBridge只有六十多K,System.Core.dll可是比他大了10倍。。。   回复  引用    

#10楼  2008-07-12 13:38 毁于随      

太强大了.   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-12 09:32 编辑过


相关链接:
 


导航

公告

朱永光 IT自由人 feedsky



InfoQ中文站.NET社区首席编辑


环境保护实践者



 

与我联系

搜索

 

常用链接

留言簿(21)

我管理的小组

我参与的团队

随笔分类

随笔档案

文章分类

.NET技术

朋友

音乐

最新评论

阅读排行榜

评论排行榜