EF Core表达式树
表达式树
什么是表达式树
表达式树(expression tree)是用树形数据结构来表示代码逻辑运算的技术,他让我们可以在运行时访问逻辑运算的结构。表达式树在.NET中对应Expression<TDelegate>类型。我们既可以让C#编译器帮我们从Lambda表达式生成表达式树,也可以在运行时通过API动态创建表达式树。
Lambda表达式生成表达式树。
1 | Expression<Func<House, bool>> expression = h => h.Price > 5; |
编译器会把=>b.Price>5这个表达式构建成Expression对象(表达式树对象),然后我们就可以使用这个表达式树对象进行数据查询了。
Expression和委托的关系
把Expression<Func<House,bool>>换成Func<House,bool>,写成下面的版本:
1 | Func<House,bool> func = h => h.Price > 5; |
查看SQL语句
Expression
Func
我们发现查询Func生成的SQL语句没有b.Price>5这个逻辑的,说明这个版本是通过客户端评估完成的。因此,为了能够正常地使用EF Core,我们一定要使用Expression<TDelegate>类型。
Expression对象存储了运算逻辑,他把运算逻辑保存成抽象语法树(AST),可以在运行时动态获取运算逻辑。而普通委托没有。
太难了,以后再学
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YOUXIANYU!
评论