Lambda表达式树
1、常量表达式树
Func<int> compile = (() => + );
使用表达式树的方式
ConstantExpression a = Expression.Constant();
ConstantExpression b = Expression.Constant();
BinaryExpression add = Expression.Add(a, b); Expression<Func<int>> lambda= Expression.Lambda<Func<int>>(add);
Func<int> compile2 = lambda.Compile();
调用
Console.WriteLine(compile());
Console.WriteLine(compile2());
输出结果

要点:
1、ConstantExpression 是常量表达式,通过Expression.Constant(object value)方法创建一个常量表达式
2、BinaryExpression 二元表达式 Expression.Add(Expression left,Expression right)这是加法二元表达式,同理还有Subtract、Multiply和Divide分别对应减、乘和除二元表达式
3、Expression.Lambda<Func<int>>(add)转换成lambda表达式树
4、lambda.Compile()将lambda表达式树转化成委托
2、参数表达式树
lambda表达式
Func<int, int> compile = x=>x+;
lambda表达式树
ConstantExpression a = Expression.Constant();
ParameterExpression b = Expression.Parameter(typeof(int),"b");
BinaryExpression add = Expression.Add(a, b); Expression<Func<int,int>> lambda= Expression.Lambda<Func<int,int>>(add,b);
Func<int,int> compile2 = lambda.Compile();
注意使用Expression.Lambda方法时,不需要提供常量表达式树
调用
Console.WriteLine(compile());
Console.WriteLine(compile2());
当left和right都是参数表达式树时
Func<int, int,int> compile = (x,y)=>x+y; ParameterExpression a = Expression.Parameter(typeof(int), "a");
ParameterExpression b = Expression.Parameter(typeof(int),"b");
BinaryExpression add = Expression.Add(a, b); Expression<Func<int,int,int>> lambda= Expression.Lambda<Func<int,int,int>>(add,a,b);
Func<int,int, int> compile2 = lambda.Compile(); Console.WriteLine(compile(,));
Console.WriteLine(compile2(,));
Lambda表达式树的更多相关文章
- C# Lambda表达式详解,及Lambda表达式树的创建
最近由于项目需要,刚刚学完了Action委托和Func<T>委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利.才能使代码更加简介 ...
- 定义通用的可通过lambda表达式树来获取属性信息
我们一般获取某个类型或对象的属性信息均采用以下几种方法: 一.通过类型来获取属性信息 var p= typeof(People).GetProperty("Age");//获取指定 ...
- EntityFramework动态多条件查询与Lambda表达式树
在常规的信息系统中, 我们有需要动态多条件查询的情况, 例如UI上有多个选择项可供用户选择多条件查询数据. 那么在.net平台Entity Framework下, 我们用Lambd ...
- 动态拼接lambda表达式树
前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表 ...
- 将简单的lambda表达式树转为对应的sqlwhere条件
1.Lambda的介绍 园中已经有很多关于lambda的介绍了.简单来讲就是vs编译器给我带来的语法糖,本质来讲还是匿名函数.在开发中,lambda给我们带来了很多的简便.关于lambda的演变过程可 ...
- Lambda表达式树解析(下)
概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...
- Lambda表达式树构建(上)
概述 Lambda是C#常用的语句,采用委托等方式,来封装真实的代码块.Lambda其实就是语法糖,是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可 ...
- Lambda表达式树解析(下)包含自定义的provider和查询
概述 前面章节,总结了Lambda树的构建,那么怎么解析Lambda表达式树那?Lambda表达式是一种委托构造而成,如果能够清晰的解析Lambda表达式树,那么就能够理解Lambda表达式要传递的正 ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
随机推荐
- 直方图与bin
1.bin的含义 直方图中bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增 ...
- [转]PHP利用Gearman来处理并行多进程问题
From : http://www.yuansir-web.com/2013/11/25/php%E5%88%A9%E7%94%A8gearman%E6%9D%A5%E5%A4%84%E7%90%86 ...
- 【转】QT中QDataStream中浮点数输出问题
先上代码: C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int main(int argc, char *argv[]) { QApplicati ...
- ZooKeeper服务命令
ZooKeeper服务命令 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 启动ZK服务: sh bin/zkServer.sh start 查看ZK服务状态: ...
- IsPostback小结
这两天一直碰到它,却总是不明白,甚至一开始连回传都不知道是啥..现在终于理解了,分享给大家,当然,如有不妥之处,还请大家不吝指教! 解释 要想明白IsPostback,先来看看下面的这 ...
- scrapy框架系列 (4) Scrapy Shell
Scrapy Shell Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据 ...
- webAR涉及的技术【转】
1.技术体系 1.1技术体系整理 其中绿色底色的代表Demo中表现出的能力比较成熟,可以直接应用. 脑图地址:http://naotu.baidu.com/file/3392a895a90397252 ...
- SharePoint 列表权限控制
一提到sharepoint 我相信权限控制一定会是一个很重要的话题,尤其是对列表的权限控制,创建.修改.查看权限.其实网上这方面的资料已经很多了,尤其是以下2篇文章,后来索性把CodeArt_Perm ...
- Logistic Regression总结
转自:http://blog.csdn.net/dongtingzhizi/article/details/15962797 Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (20 ...
- PowerDesigner设置表字段唯一约束
现有一个表student,id为主键. 现打算给name添加一个唯一约束. 双击打开这个表,点击“keys"选项卡,显示有一个key_1,这是id主键. 点击”insert a row'插入 ...