EF中一种简单的多条件动态查询方法
多条件动态查询是任何一个数据系统都会处理的问题。如果使用纯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中一种简单的多条件动态查询方法相关推荐
- python图表制作方法_Python中一种简单的动态图表制作方法
在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了Python中一种简单的动态图表制作方法. 数据暴增的年代,数据科学家. ...
- 一种简单的蒙特卡洛树搜索并行化方法
监控未观察样本: 一种简单的蒙特卡洛树搜索并行化方法 Watch the Unobserved: a Sample Approach to Parallelizing Monte Carlo Tree ...
- 一种简单易用的台球瞄准方法——对称瞄准法
一种简单易用的台球瞄准方法 --对称瞄准法 台球运动是一种大众喜欢的休闲娱乐活动.在各类台球运动中,都需要使用主球把目标球击打进袋,在这个过程中,瞄准是击打进袋的重要一环. 台球瞄准的方法有很多种,比 ...
- 怎么给照片降噪?分享两种简单好用的图片降噪方法
怎么给照片降噪呢?大家在使用数码摄影的时候,相机将光线作为接收信号接收并输出的过程中,会产生图片中粗糙的部分,这本是不该出现的外来像素,导致拍出来的照片或多或少会出现噪点,让图片看起来不美观.这时候我 ...
- 一种简单快速有效的低照度图像增强方法
一种简单快速有效的低照度图像增强方法 一.本文介绍的是一种比较实用并且去阴影效果很好的方法,选自2004年Tao的一篇论文,名称是<An Integrated Neighborhood Depe ...
- 计算机房间墙壁的布置,11种简单且有特色的墙面布置方法
你有试着自己装点过自己房间的墙面吗?最简单也最快速的装饰方法就是用相片以及海报,但是时间久了就会发现似乎也歇缺乏新意,以下介绍了11种简单且有特色的墙面布置方法,运用的素材从杂志内页到相框.甚至地图都 ...
- 【面试题】CSS 中几种最常用的水平垂直居中的方法
目录 CSS 中几种最常用的水平垂直居中的方法 一.使用 margin:auto 二.使用 position:absolute 三.使用弹性布局 四.文本水平对齐和行高 五.使用网格布局 CSS 中几 ...
- WINFORM 多条件动态查询 通用代码的设计与实现
经常碰到多条件联合查询的问题,以前的习惯认为很简单总会从头开始设计布局代码,往往一个查询面要费上老半天的功夫,而效果也不咋地. 前段时间做了个相对通用的多条件动态查询面,复用起来还是挺方便的, ...
- mysql 使用if函数实现多条件动态查询
简单多条件动态查询 1.条件为NULL时,不起作用 set @iid = NULL; select * FROM t_sys_cpy WHERE IF(@iid is NULL,1=1,ID = @i ...
- python中5种简单的数据类型,没有学不会的python--认识简单的数据类型
没有学不会的python 先提一下肛 相信很多同学都听过数据类型这个词吧?无论是零基础还是有其他编程语言的同学,对这个词都不会陌生.基本上来说,无论什么教程,都是会把这个数据类型提前拿出来讲透,因为这 ...
最新文章
- Android 你知道界面布局嵌套多少层之后会Crash吗
- 香河php程序员_失控的香河最流行的四大职位
- Swift 反射Mirror的使用
- C++中getline函数的使用
- 【软件工程】CMMI 能力成熟度模型集成 ( 简介 | 相关术语 | CMMI 等级评估次序 )
- 第八天2017/04/17(2、❤String类的源代码)
- RtlAdjustPrivilege 一行代码提升进程权限
- Django后台admin的使用
- 没推送功能,你好意思叫APP嘛?
- 解决【Unable to find the requested .Net Framework Data Provider. It may not be installed.】错误...
- 工作220:git clone的时候地址需要改成自己的用户名
- canvas 多次画图效果_canvas练习之终极的奔跑小人
- [Matlab] 不能在 syms 中假设 symfun 的值域
- 如果我是一线技术主管…… 1
- Find 7轻装版和正式版存储内存方面区别
- 数据结构之广义表的相关知识点
- CentOS7安装MySQL 8.0安装
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- ie11只能用管理员身份打开解决办法
- CF1041E Tree Reconstruction
热门文章
- 多线程----使用线程池爬取二手房信息
- 解决Windows 11 NumLock键盘数字灯不亮的问题
- VSCode PIO创建工程失败分析和解决办法
- 广东最美的历史古村落,再不去就没了
- U8C报表模板已设置,任务已分配仍无法查看报表数据
- 在银河麒麟V10操作系统上成功安装lnmp详细步骤
- 【ARM】Kylin V10/ARM平台上源码安装gcc 11.2
- linux 清理垃圾指令,Linux清理系统垃圾
- 四川大学计算机学院管理手册,机房管理_规章制度_计算机基础教学实验中心 - Powered by 四川大学计算机基础教学实验中心...
- 尚硅谷周阳老师 - Docker课程学习