[转]Linq与Expression

写在前面:Linq的强大已经引起了大众的关注,很多人想方设法去学习,去了解。的确,它作为.Net3.0提供的新功能,给了大家一个对象层次上对关系操作的很爽的体验。现在的程序员了解Sql的了解面向对象的要多,使用Linq来模仿Sql并操作对象,这也许是一个倒退,不过,这也的确是历史的选择,是符合大众的需求的。而Linq之所以这么的强大,有人说,是因为.Net2.0把部分编译器做的操作交给了对象定义,事实上linq表达就是这样的。Linq中最核心的Expression(表达式)就是一种编译器的行为转为对象的表现。

介绍两个重要的链接
Linq工具集
http://code.msdn.microsoft.com/csharpsamples/Release/ProjectReleases.aspx?ReleaseId=8
这是微软提供的例子,包含很多Linq的使用例子,其中有一个很重要的工具
ExpressionTreeVisualizer,还是IQueryable提供程序的例子
创建 IQueryable LINQ 提供程序
http://msdn.microsoft.com/zh-cn/library/bb546158.aspx
这个例子的代码在上面的链接上,而详细说明在网页上。

Linq表达式
在.net3.0之后,可以使用Linq表达式,即from a in set where a.x == y select a之类的表达,这是.net3.0所支持的面向关系的表达方式
实质
就是编译器对IQueryable对象提供的特定的关键词支持
内涵
Linq表达式会被解释成为Expression的集合,这在System.Data.Linq.Expression命名空间中,通过不同的IQueryable提供程序的解释而组成不同的操作,如果是对数据库的,就会形成数据库的Sql。

Expression
这是可以被理解为可编译单元的东西,一般的程序,组成集合形式,可以使用数组(Expression[]),List对象List<Expression>,还可以是树型,这里,Expression就是一个树型的对象,它可以表达很多层次的对象。
如果学习过数据结构,你也许记得二叉树可以表达数学运算式,如a+b*3-c,是可以使用二叉树表达出来的。
Expression就是这样的树,继承Expression的类有很多种,这些类组合起来形成一个宏大的树。

Linq To Sql
它就是先将Linq变成一个巨大的Expression树,然后解释成为Sql的。

Expression的一个良好性质
var a = new XYZ();
Expression<Func<object,object>> _express = x=> new {a.X,a.Y,a.X};
通过这个表达式,你可以提取到a.X,a.Y,a.X等内容,取得的是定义,而不是a.X的内容,也就是你可以返回”a.X”,而不是a.X的实例,这是一个可以被很多地方利用的优点。这就是之前所说的,编译器开放给用户的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值