tnblog
首页
视频
资源
登录

C#EF 封装动态表达式树进行查询(一)

9239人阅读 2019/12/6 19:01 总访问:300458 评论:3 收藏:1 手机
分类: .NET

希望能带给大家一些想法,碰撞出属于你的火花, EF动态条件查询之前我们先看看原始查询条件类型吧



   一般查询是这样的

    var UserData = mas.UserInfor.Where(t => t.UserName == "").ToList();


   我们看看 Where 的条件进入到系统底层它的值类型是这个样子的  Expression<Func<TSource, bool>> predicate


   重点 TSource 这个是我们的表名称

    

    然后,我们可以尝试这样改查询条件



然后我们调用的时候就可以这样了



这样  我们查询的时候就很灵活了,不管以后你查哪张表我们都可以很灵活的代入条件


有的人可能想到用 if 去判断累加条件



这样不觉得麻烦吗?


官方文档 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/how-to-use-expression-trees-to-build-dynamic-queries



实在是难看看了好久才明白


第一步

  ParameterExpression pe = Expression.Parameter(typeof(UserInfor), "company"); 根据我们的实体创建


            生成表达式 1

                Expression left = Expression.Property(pe, typeof(UserInfor).GetProperty("UserName"));

                Expression right = Expression.Constant("张胜男");

                Expression e1 = Expression.Equal(left, right);

            生成表达式 2

                left = Expression.Property(pe, typeof(UserInfor).GetProperty("PassWord"));

                right = Expression.Constant(PassWord);

                Expression e2 = Expression.Equal(left, right);


然后把两个表达式合成

 

               var ea = Expression.AndAlso(e1, e2);


然后转成我们需要的表达式


                expression = Expression.Lambda<Func<UserInfor, bool>>(ea, pe);

//传入我们的初始放方法里面


              UserInfor userInfor = userInfoDAL.GetUser(expression);

上个GIF




好啦,动态创建表达式就好了,但是官方的太不友好了,就可以用 别人做好的轮子来进行引用,但是理解了这篇文章,引用别人的就不会太难理解了


关机下班啦



评价

剑轩

2019/12/7 9:46:16

表达式树确实很经典

人生若只如初见:@剑轩但是,官方的太复杂了,还是别人造的轮子比较好使,还简单化

2019/12/9 8:51:40 回复

剑轩:@人生若只如初见嗯嗯,熟悉表达式树后可以自己封装一些常用的方法出来

2019/12/9 9:59:58 回复

net core过滤器。net core过滤器中获取依赖注入对象。net core过滤器中使用依赖注入。ServiCEFilter 

虽然对象都可以直接实例化得到。但是所有的对象依赖关系,都用DI容器去管理,这样后面想要更换对象的时候也非常方便,项目...

windows的CEF的使用

cef使用先准备一个准备工作,由于cef仅支持32位操作系统的,所以要把64位切换为32位。第一是目标平台第二是两个做好之后安...

C ?、?? 问号和2个问号的用法类型?、对象?

C# ?C# ???:单问号1.定义数据类型可为空。可用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值如这...

Python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

C 数组拆分泛型

主要用到了泛型。泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值...

MySQL 视图的增删改 查

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

使用NPOI导出excel包括图片

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

ajaxSubmit异步上传图片嘘,外面都是假的

引用代码&lt;scriptsrc=&quot;/Scripts/jquery.form.js&quot;&gt;&lt;/script&gt;js就在旁边img链接中,只不过大小为0x0,...

.NET MVC 使用百度编辑器详细教程:1配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

使用jquery操作元素的css样式获取、修改等等

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $(&quot;#tow&quot;).attr(&quot;class&quot;)...

.net辗转java系列视野

.net辗转java系列(一)视野.net系java系其它语言C#Java框架.net Framework Standardjava se.net corejava eejave meJava S...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

mui框架-移动端跳转以及传值的简单方法修改解决方法

纠结了两天的MUI跳转的问题,终于解决了 ,现在分享给大家,希望大家有什么坑的解决也给我分享分享 哈哈,废话不多说,上代...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...
若人生只如初见,愿还是相遇的那个下午,阳光明媚转身一笑便如春暖花开
排名
16
文章
53
粉丝
7
评论
13
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术