博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态Lambda表达式打印HelloWorld
阅读量:6827 次
发布时间:2019-06-26

本文共 1055 字,大约阅读时间需要 3 分钟。

最近在用C#与数据库打交道。开发过程中采用了ORM模型(以前是纯sql玩法,复杂的逻辑用存储过程做)。

为了能通过配置文件动态地查询字段,也就是说需要能这样写:

 db.AsQuery<T>.Select("字段")//伪代码 

通过多方查找终于找到了方案,那就是用动态Lambda表达式树(.net3.5以后的版本支持)。

后来看别人写的ORM代码中,将C#代码转为SQL语句时出采用了表达式树,所以马上提起了学习兴趣。

先写着写一个hello world ,就是动态地拼出一个 x=>Console.WriteLine(x);

1 Action
action = x => Console.WriteLine(x);2 action("hello world");

代码如下:

1 //参数 x => Console.WriteLine(x) 中 最前面的那个 x 2             var para = Expression.Parameter(typeof(String), "x"); 3             //找到 onsole.WriteLine(String value) 这个版本 4             MethodInfo method = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }); 5             //拼接 Console.WriteLine(x) 方法体 6             var call = Expression.Call(null, method, para); 7             //拼接成 x => Console.WriteLine(x) 格式 8             var lambda = Expression.Lambda
>(call, para); 9 //转换成委托10 var action = lambda.Compile();11 action("hello world");

以下为运行的时候看到的效果

先写一个做为入门,慢慢研究。

转载于:https://www.cnblogs.com/lclblog/p/6679810.html

你可能感兴趣的文章
tsconfig.json整理记录
查看>>
adb通信协议分析以及实现(四):adb shell 命令分析
查看>>
日常工作中,个人总结的 - Git - 常用操作方法 (一)
查看>>
面试中被面试官问到的问题答案(一)
查看>>
使用属性Props完成一张卡片
查看>>
49. Group Anagrams
查看>>
TypeScript实现数据结构(一)栈,队列,链表
查看>>
IOS评论框不贴底(ios12新bug)
查看>>
26. Remove Duplicates from Sorted Array
查看>>
Jenkins in Action :GitLab 部署 Maven 项目
查看>>
从0开始构建SpringCloud微服务(1)
查看>>
Linux Shell 生成随机数和随机字符串
查看>>
泛型之通配符
查看>>
PHP_SELF变量解析和重复路径解决
查看>>
解决mac下webstorm编辑器识别less的问题
查看>>
微服务所需组件(大部分是Spring Cloud,持续更新)
查看>>
JavaScript闯关笔记
查看>>
Nacos系列:基于Nacos的配置中心
查看>>
做Web前端开发的你必须会这几点!
查看>>
react特性
查看>>