多条件动态查询是任何一个数据系统都会处理的问题。如果使用纯SQL和数据库进行交互,可以使用SQLHepler之类的工具根据用户输入来动态生成SQL语句。在EF框架下进行多条件动态查询,有各种不同的方法。最近看了和尚兄的代码,简单易懂,值得学习。其基本思想就是动态的组装查询计划,避开动态生成委托的复杂性。
        数据模型类:

   class Person{public string Name;public int Age;public float Weight;public string Hobby;}

在构造函数中初始化数据:

        private List<Person> m_DataSourc;//构造函数中初始化演示数据源public Demo1(){m_DataSourc = new List<Person>{new Person{Name="熊大", Age=31,Weight=125,Hobby="吃饭"},new Person{Name="熊二", Age=30,Weight=120,Hobby="睡觉"},new Person{Name="光头强", Age=28,Weight=70,Hobby="砍树"},new Person{Name="喜羊羊", Age=12,Weight=20,Hobby="自拍"},new Person{Name="美羊羊", Age=13,Weight=21,Hobby="自拍"},new Person{Name="懒羊羊", Age=14,Weight=22,Hobby="睡觉"},new Person{Name="灰太狼", Age=30,Weight=60,Hobby="抓羊"}};}

构造一个查询方法,以四个参数进行查询,由于参数可能不存在,均为默认参数。

        //查询方法public void Search(string name = null, int? age = null, float? weight = null, string hobby = null){//为了模拟EF查询,转换为IEnumerable,在EF中此处为数据库上下文的表对象var result = (IEnumerable<Person>)m_DataSourc;/*下列代码不会立即执行查询,而是生成查询计划* 若参数不存在则不添加查询条件,从而可以无限制的添加查询条件*/if (!string.IsNullOrEmpty(name)) { result = result.Where(d => d.Name.Contains(name)); }            if (age.HasValue) { result = result.Where(d =>d.Age >= age); }if (weight.HasValue) { result = result.Where(d => d.Weight >= weight); }if (!string.IsNullOrEmpty(hobby)) { result = result.Where(d => d.Hobby.Contains(hobby)); }//此时执行查询var final = result.ToList();Console.WriteLine("");Console.WriteLine("*******开始结束*******");foreach (var i in final){Console.WriteLine("姓名:{0}  年龄:{1}  体重 :{2}  爱好:{3}", i.Name, i.Age, i.Weight, i.Hobby);}Console.WriteLine("*******查询结束*******");Console.WriteLine("");}

在客户端代码中调用:

   static void Main(string[] args){Demo demo = new Demo();//无参数查询demo.Search();//一个参数查询demo.Search("羊");//两个参数查询demo.Search("羊", 13);//三个参数查询demo.Search("羊", 13,21);//四个参数查询demo.Search("羊", 13, 21,"睡");Console.Read();}

结果如下:

我们分别使用了0-4个参数进行查询。

EF中一种简单的多条件动态查询方法相关推荐

  1. python图表制作方法_Python中一种简单的动态图表制作方法

    在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了Python中一种简单的动态图表制作方法. 数据暴增的年代,数据科学家. ...

  2. 一种简单的蒙特卡洛树搜索并行化方法

    监控未观察样本: 一种简单的蒙特卡洛树搜索并行化方法 Watch the Unobserved: a Sample Approach to Parallelizing Monte Carlo Tree ...

  3. 一种简单易用的台球瞄准方法——对称瞄准法

    一种简单易用的台球瞄准方法 --对称瞄准法 台球运动是一种大众喜欢的休闲娱乐活动.在各类台球运动中,都需要使用主球把目标球击打进袋,在这个过程中,瞄准是击打进袋的重要一环. 台球瞄准的方法有很多种,比 ...

  4. 怎么给照片降噪?分享两种简单好用的图片降噪方法

    怎么给照片降噪呢?大家在使用数码摄影的时候,相机将光线作为接收信号接收并输出的过程中,会产生图片中粗糙的部分,这本是不该出现的外来像素,导致拍出来的照片或多或少会出现噪点,让图片看起来不美观.这时候我 ...

  5. 一种简单快速有效的低照度图像增强方法

    一种简单快速有效的低照度图像增强方法 一.本文介绍的是一种比较实用并且去阴影效果很好的方法,选自2004年Tao的一篇论文,名称是<An Integrated Neighborhood Depe ...

  6. 计算机房间墙壁的布置,11种简单且有特色的墙面布置方法

    你有试着自己装点过自己房间的墙面吗?最简单也最快速的装饰方法就是用相片以及海报,但是时间久了就会发现似乎也歇缺乏新意,以下介绍了11种简单且有特色的墙面布置方法,运用的素材从杂志内页到相框.甚至地图都 ...

  7. 【面试题】CSS 中几种最常用的水平垂直居中的方法

    目录 CSS 中几种最常用的水平垂直居中的方法 一.使用 margin:auto 二.使用 position:absolute 三.使用弹性布局 四.文本水平对齐和行高 五.使用网格布局 CSS 中几 ...

  8. WINFORM 多条件动态查询 通用代码的设计与实现

    经常碰到多条件联合查询的问题,以前的习惯认为很简单总会从头开始设计布局代码,往往一个查询面要费上老半天的功夫,而效果也不咋地.     前段时间做了个相对通用的多条件动态查询面,复用起来还是挺方便的, ...

  9. mysql 使用if函数实现多条件动态查询

    简单多条件动态查询 1.条件为NULL时,不起作用 set @iid = NULL; select * FROM t_sys_cpy WHERE IF(@iid is NULL,1=1,ID = @i ...

  10. python中5种简单的数据类型,没有学不会的python--认识简单的数据类型

    没有学不会的python 先提一下肛 相信很多同学都听过数据类型这个词吧?无论是零基础还是有其他编程语言的同学,对这个词都不会陌生.基本上来说,无论什么教程,都是会把这个数据类型提前拿出来讲透,因为这 ...

最新文章

  1. Android 你知道界面布局嵌套多少层之后会Crash吗
  2. 香河php程序员_失控的香河最流行的四大职位
  3. Swift 反射Mirror的使用
  4. C++中getline函数的使用
  5. 【软件工程】CMMI 能力成熟度模型集成 ( 简介 | 相关术语 | CMMI 等级评估次序 )
  6. 第八天2017/04/17(2、❤String类的源代码)
  7. RtlAdjustPrivilege 一行代码提升进程权限
  8. Django后台admin的使用
  9. 没推送功能,你好意思叫APP嘛?
  10. 解决【Unable to find the requested .Net Framework Data Provider. It may not be installed.】错误...
  11. 工作220:git clone的时候地址需要改成自己的用户名
  12. canvas 多次画图效果_canvas练习之终极的奔跑小人
  13. [Matlab] 不能在 syms 中假设 symfun 的值域
  14. 如果我是一线技术主管…… 1
  15. Find 7轻装版和正式版存储内存方面区别
  16. 数据结构之广义表的相关知识点
  17. CentOS7安装MySQL 8.0安装
  18. OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
  19. ie11只能用管理员身份打开解决办法
  20. CF1041E Tree Reconstruction

热门文章

  1. 多线程----使用线程池爬取二手房信息
  2. 解决Windows 11 NumLock键盘数字灯不亮的问题
  3. VSCode PIO创建工程失败分析和解决办法
  4. 广东最美的历史古村落,再不去就没了
  5. U8C报表模板已设置,任务已分配仍无法查看报表数据
  6. 在银河麒麟V10操作系统上成功安装lnmp详细步骤
  7. 【ARM】Kylin V10/ARM平台上源码安装gcc 11.2
  8. linux 清理垃圾指令,Linux清理系统垃圾
  9. 四川大学计算机学院管理手册,机房管理_规章制度_计算机基础教学实验中心 - Powered by 四川大学计算机基础教学实验中心...
  10. 尚硅谷周阳老师 - Docker课程学习