linq总结系列(二)---linq中的Expression

linq中的表达式和表达式树

  Linq中的表达式(Expression<TDel>)是强类型的lambda表达式,对Func和Action形式的委托做了一层封装。

  lambda表达式是本质是简写的匿名函数,可以赋值给Func或Action类型的委托,在.net中被编译成可执行的代码;lambda表达式赋值给Expression<TDel>>,.net将其转换成表达式树。

什么是表达式树:

  表达式树是表达式的内存表示,保存了表达式的数据结构。如我们查询年龄大于18岁的学生,使用lambda表达式为stu=>stu.Age>18,这个表达式会被.net转化成一棵表达式树:树的每一个节点都是一个表达式,如输入参数stu用ParameterExpression表示,18用ConstantExpression表示,具体如下图(图片来源:http://www.yuanjiaocheng.net/Linq/linq-expression-tree.html)

使用表达式树的好处:

  表达式树是完全透明的,方便了解参数和功能(EF中的Linq to Sql要把linq语句转化成sql语句,lambda赋值给Func或者Action,其被转换成可执行代码,要把可执行代码转换成Sql很不方便,如果把lambda赋值给Expression,程序很方便的通过表达式树获取数据结构,从而使转换sql时变得方便)

猜你喜欢

转载自www.cnblogs.com/wyy1234/p/9057140.html