2.1语法基础_表达式目录树(EF底层原理的实现)
目绿
1.表达式目录树是什么?
2.表达式目录树的作用?
3.数据库最终需要的是sql语句,为什么使用EF框架写一些lamda就可以获取到数据
1.表达式目录树本质是什么?
1.表达式目绿树本质就是一种数据结构(二叉树),如m*n+2+x 会从右往左拆分成 >(M*n+2)+x>(M*n)+2>M*n
2.拉姆达表达式是作为委托的一个参数,本质就是一个匿名方法,它只不过是可以快捷的声明表达式目绿树
2.表达式目录树的作用:
1.SQL查询语句拼接, (之前写sql查询条件都是根据一个个条件进行判断拼接,) 使用表达式目录树可以动态拼接
为什么要用表达式目录树去拼接sql语句?
1.以前老的写法是 多个条件进来 通过if一个个判断来进行组装sql语句
2.使用表达式目录数之后就可以写一个公共方法 提高代码重用性
2.使用表达式目录树动态转换类,和硬编码性能几乎没啥差距 类与类之间的转换,使用表达式目录树把A类变成一个新的B类(结构要相同)
一般实现方法:1.硬编码(写死),2.json序列化,3.表达式目录树
实现方法使用反射获取到A类的属性和字段, 用表达式目录树拼接好一个新的B类,然后使用委托执行B类,最后使用泛型缓存 存储每个执行的委托(泛型缓存:为每个不同类型生成副本,所以不同类型只需要执行一次委托,后面就直接从缓存里面取) ,这样性能高,扩展性好,又解决了反射的性能问题,
3.数据库最终需要的是sql语句,为什么使用EF框架写一些lamda就可以获取到数据(EF底层原理的实现?)
EF框架之所以能够写lamda就能访问数据库实际底层原理就是:通过表达式目录树 来一步步解析拉姆达 拼接组装成数据库能访问的sql语句(解析的过程就是访问者模式)
本文来自博客园,作者:12不懂3,转载请注明原文链接:https://www.cnblogs.com/LZXX/p/13529233.html