范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

。NET通用多条件动态参数查询方法

  通用查询用途
  一般我们Grid控件,会有很多条件传给后台,如果每个条件都写一个逻辑的话,那么工作量将非常大,所以通用查询功能是每个软件必备的,
  SqlSugar将通用查询封装到支持了树型条件,并且支持所有常用的操作,用SqlSugar或者不用SqlSugar的都可参参考一下1、简单多条件多动参数
  创建数据库对象 //创建数据库对象 SqlSugarClient     SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()  {             ConnectionString = "Server=.xxxxx",//连接符字串             DbType = DbType.SqlServer, //数据库类型             IsAutoCloseConnection = true //不设成true要手动close  });
  前台传的JSON格式 [{},{},{}] [    {"FieldName":"id","ConditionalType":"0","FieldValue":"1"},    {"FieldName":"name","ConditionalType":"0","FieldValue":"jack"}  ]
  后台代码 //手动构造 var conModels = new List(); conModels.Add(new ConditionalModel{ FieldName = "id",ConditionalType=ConditionalType.Equal,FieldValue="1"}); conModels.Add(new ConditionalModel{ FieldName = "name",ConditionalType=ConditionalType.Equal,FieldValue="jack"});     //5.0.5.1 Json直接序列化 var conModels= db.Context.Utilities.JsonToConditionalModels(json)     var student = db.Queryable().Where(conModels).ToList(); //select * from Student where id=1 and name = "jack"
  这种比较简单 多一条记录就多一个AND2、二级多条件动态参数
  这种模式对于表格查询已经够用了,支持到2级查询,并且AND OR都比较灵活了[ {"FieldName": "id","FieldValue": "1","ConditionalType": 10},    {"FieldName": "id","FieldValue": null,"ConditionalType": 12},    {     "ConditionalList": [{         "Key": 1,         "Value": {             "FieldName": "id",             "FieldValue": "2",             "ConditionalType": 0         }     }, {         "Key": 0,         "Value": {             "FieldName": "id",             "FieldValue": "2",             "ConditionalType": 0         }     }] }] //5.0.5.1 Json直接序列化 var whereList= db.Context.Utilities.JsonToConditionalModels(json); var list = db.Queryable().Where(whereList).ToList();
  生成的Sql:  WHERE   [id] <> @Conditid0        AND    [id]  IS NOT  NULL        OR     (   [id] = @Conditid10000   AND   [id] = @Conditid20000   )
  说明: ConditionalList 第一个Key为1 那么就会生成 Or( 条件 )
  ConditionalList 第一个Key为0 那么就会生成 And( 条件 )
  Key表式运算符: And =0, Or=1
  例子1: ConditionalList 集合中 有3条记录 key =1 , key =0 ,key=1
  生成的Sql OR(条件 AND 条件 OR条件)
  例子2: ConditionalList 集合中 有1条记录 key =1
  生成的Sql OR(条件)
  例子3 :ConditionalList 集合中 有4条记录 key =0,key=1,key=1,key=1
  生成的Sql AND (条件 OR 条件 OR条件 OR 条件)
  这种模式只支持2级操作,需要更多层级就实现不了了3、树型动态条件 (请升级5.0.5.1)
  这种就比较强大了,一般用于表的公开API等操作,可以构造任何层级的条件 ,可以支持树型条件
  Key表式运算符: And =0, Or=1, null=-1   [{     "ConditionalList": [{         "Key": -1,         "Value": {             "FieldName": "id",             "FieldValue": "2",             "ConditionalType": 0         }     }, {         "Key": 0,         "Value": {             "FieldName": "name",             "FieldValue": "2",             "ConditionalType": 0         }     }, {         "Key": 0,         "Value": {             "ConditionalList": [{                 "Key": -1,                 "Value": {                     "FieldName": "price",                     "FieldValue": "1",                     "ConditionalType": 0                 }             }, {                 "Key": 0,                 "Value": {                     "FieldName": "CustomId",                     "FieldValue": "1",                     "ConditionalType": 0                 }             }]         }     }] }]
  生成的SQL:  WHERE  (   [id] = @Conditid10001           AND   [name] = @Conditname20001         AND(   [price] = @Conditprice10000   AND   [CustomId] = @ConditCustomId20000   )  )
  C#代码var conditionalModels = db.Context.Utilities.JsonToConditionalModels(json); var list = db.Queryable().Where(conditionalModels).ToList();
  更多用例:https://www.donet5.com/Ask/9/143783、操作符解释
  ConditionalTypek是一个枚举
  枚举
  枚举值
  描述
  Equal
  0
  等于   Like   1
  模糊查询   GreaterThan   2
  大于   GreaterThanOrEqual   3
  大于等于   LessThan   4
  小于   LessThanOrEqual   5
  小于等于   In   6In操作   正确格式 X,Y,Z   错误格式 "X","Y","z"   NotIn   7
  Not in操作 参数和in一样   LikeLeft   8
  左模糊   LikeRight   9
  右模糊   NoEqual   10
  不等于   IsNullOrEmpty   11
  是null或者""   IsNot   12情况1 value不等于null   字段<> x   情况2 value等于null   字段 is not null   NoLike   13
  模糊查询取反   EqualNull   14情况1 value不等于null   字段= x   情况2 value等于null   字段 is null   InLike   15正确格式 X,Y,Z   错误格式 "X","Y","z"   生在的Sql :   ( id like "%X%" or id like "%Y%" or id like "%Z%")4、列名验证或者转换   需求1:实体和表中字段名称不一样的情况下,我们可以做下面的转换foreach(var r in conModels) { r.FieldName =db.EntityMaintenance.GetDbColumnName(r.FieldName );//这样就支持了用实体类中的属性作为参数 }   看文档:需求2:我要验证前端传过来的属性名和实体一样,列名虽然防注入,但是还是可以任意传,对于高安全级别项目加个验证更保险   https://www.donet5.com/Home/Doc?typeId=12025、类型转换   比如PGSQL不支持字符串参数与INT类型相等,我们可以使用类型转换//SqlSugar自带的类型转换 new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1", FieldValueConvertFunc=it=>SqlSugar.UtilMethods.ChangeType2(it,typeof(int)) } //自个实现类型转换 new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1", FieldValueConvertFunc=it=>Convert.ToInt32(it)) } 6、多表查询去别名List conModels = new List(); conModels.Add(new ConditionalModel{ FieldName = "id", ConditionalType = ConditionalType.Equal,FieldValue="1"}); //查询 var list=db.Queryable() .LeftJoin ((o,i) => o.CustomId == cus.Id) .LeftJoin ((o,i,c) => o.Id == oritem.OrderId) .Select((o,i,c)=> new ViewOrder{ Id=o.Id CustomName=c.Name }) // 是一个新类 .MergeTable()//通过MergeTable处理下面的查询就不需要加上 (o,i,c) 的别名限制了 .Where(conModels)//因为Select通过Mergetable变成了一个新表,也就是说新表只有 id和CustomName .ToList(); 7、未来计划   未来会打算支持 Sql函数,真正做到所有的查询条件都能用   安装: Nuget SqlSugarCore   源码: https://github.com/donet5/SqlSugar   转自 https://www.cnblogs.com/sunkaixuan/p/15732736.html   喜欢的朋友点一下关注 点关注不迷路

从五年IOS果粉转红米K40por三个月真实使用感受原来一直用6SP,老婆用苹果X,以前对安卓的感觉很差,内心挣扎了很久才才下决心转安卓阵营的,平时就玩玩吃鸡,说说刚转过来的感受优点1,120HZ太流畅了,爽2,33W充电很快3,小OLED屏的普及之作,小米电视6OLED测评目前家用电视机屏幕主要有两种类型,一种是液晶,一种是OLED。液晶技术很成熟,应用也非常广泛,具有寿命长,效果好,相对环保和省电的优势,最重要的是,液晶屏更便宜。而OLED算是新技阿里巴巴员工总数超25万,为什么只有6000人发起倡议?不在沉默中爆发,就在沉默中死亡!据报道,阿里员工组建了员工帮助的讨论群,已有6000多名阿里员工加入了这个群。这6000多人发布了关于员工性侵事件的联合倡议。倡议认为,这个事件显示阿里女员工被侵犯案反思人事部门理性多了,感性少了?民法典生效已经8月有余了,阿里竟然才想起制定反性骚扰行动准则开通专门负责部门,多少让民法典尴尬了。8月9日凌晨,阿里巴巴董事会主席兼CEO张勇在阿里内网公布了女员工被侵犯的阶段性内被神化已久的阿里,必须经得起舆论批评,它早该走下神坛文远见陈这几日关于阿里巴巴内部出现的事件,沸腾不止,我们终于看到了一个不一样的阿里。什么阿里?一个被过度神化的民营企业。我一直认为阿里的崛起,是吃了国家发展的红利期,它是线上卖货的五大天价电子产品!手表2。5亿,电视1500万,网友格局打开了作为普通消费者,我们在购物时往往追求性价比,所以类似小米这样的品牌十分有市场。当然,性价比是一个相对论,很多出色的数码产品价格不菲,但也贵的有道理。比如做工极为精致甚至全手工打造使微信又更新了!网友直呼真香啊你发现了吗?微信又悄悄更新了!这次都有哪些新功能呢?快跟小编一起来了解下这两天,微信表情都戴医用口罩了登上热搜,引发网友广泛关注。赶快查看下自己手机微信,是不是发现生病这个表情确实雷军,意外投了一个足浴机器人只有你想不到,没有雷军投不到消费型机器人开始走进千家万户。作者I张继文刘福娟报道I投资界PEdaily这是一笔低调到几乎被遗漏的投资。起源是一则工商变更投资界从天眼查APP获悉,佛Java输了?8月编程排行榜新鲜出炉8月最新的编程语言榜单发布了,本月榜单中Python成功超越Java。如今,数据挖掘和人工智能这一领域的编程语言正在逐渐崛起。Python不仅成功挤入前三并有望冲击第一,更是获得了封号潮令数十亿库存滞留,大卖挥泪低价清仓从4月开始,亚马逊掀起一场旷日持久的封号潮,数万卖家受影响。行业巨震之下,库存问题已成为卖家们面临的最大死敌。一旦库存高企,跨境企业就像推倒了的多米诺骨牌,资金链承压营收下降供应商取消大小周后,年轻人为什么又不干了?自腾讯旗下光子工作室调整为强制6点下班后,互联网大厂接连送上减负大礼包。字节跳动快手美团优选先后取消大小周制度,一时间有关反内卷胜利终结加班文化的欢呼声不绝于网络。然而,大厂打工人
小米最大对手现身?realme斩获安卓手机销量TOP2,双雄争霸有关注过手机市场的朋友都清楚,昨天是618战斗打响的第一天,对于各大厂商们来说,都想在第一天取得一个好成绩,为接下来的时间中打下一个好基础。这不,今天一早各大厂商就纷纷晒出了昨日所无感低延迟,畅享顺滑吃鸡体验!西圣Olaf游戏耳机评测手机除了作为日常的通讯社交设备,游戏娱乐也是非常重要的一部分特别是很多相对年轻的群体中,使用手机玩游戏几乎占据了每天的休闲时光。在游戏中畅享顺滑体验,除了手机的配置,一款相对专业的618黑马现身,realme超越华为,直冲前三,是格局变了吗?六月,不仅仅是儿童节了,伴随年龄的增长,我开始关注手机,关注科技,慢慢地,我的潜意识里,6月不再是儿童节了,更多的是618的狂欢的前奏。各大厂商都拿出了自己的杀手锏,然而,Real专业护眼,助力家长辅导提升学习效率的大力智能学习灯体验随着学习的不断深入,每次给孩子辅导作业都感觉有些力不从心,很多时候不得不通过电脑手机来查资料搜答案虽然也想让孩子自己独立去完成,却总担心把手机放任交给孩子,多少会分散孩子的注意力,百元价位,推荐Xisem西圣Ava蓝牙耳机的N个理由无线蓝牙耳机作为618购物车的必清选项,在对比了多款不同品牌不同样式的产品后,这次我选择了Xisem西圣Ava蓝牙耳机。作为日常刷街的必备品,最后选择它,不仅仅是百元价位的高性价比重要的事情说三遍,魔性的当贝投影电梯广告又双叒来了都说重要的事情说三遍,但在写字楼或者住宅小区的电梯间内,只有0和无数遍。提到电梯广告,很多朋友想到的一定是当贝的魔性广告,一段看似平淡的电梯之旅,却因为那支魔性的当贝!当贝!当贝投助力吃鸡,听声续航一步到位!努比亚红魔手游拓展坞体验市场上很多主流品牌手机基本上都取消了3。5mm耳机接口,随之带来的就是无线蓝牙耳机的普及和广泛使用。但对于很多游戏玩家来说,无线耳机的延迟感是一个不折不扣的痛点,这也是很多游戏玩家更科学的早教功能,资源丰富学习简单,牛听听超记牛上手现在适合小朋友的各种学习资源非常多,但要想让小朋友获得更好的学习体验,还是需要用到一些专业的学习工具,像是早教机熏教机这类设备就很适合小朋友使用,很多时候小朋友自己就可以流畅操作,年轻人的第一款入门骨传导,南卡RunnerCCII骨传导蓝牙耳机体验骨传导蓝牙耳机早已不再是高端发烧级产品,很多粉丝经常私信问,有没有性价比高的骨传导耳机可以推荐?说到性价比,就不得不提最近南卡新推出的RunnerCCII骨传导蓝牙耳机,作为前代的10。1寸智能触摸屏磁控静音,居家骑行好物野小兽M3动感单车体验生活节奏加快工作压力大,每天都在忙碌中前行,很容易忽视对自身身体健康的管理。即便很多时候总会觉得自己还年轻可以坚持可以肆意挥霍,但积劳成疾的道理却从来不会给年轻任何折扣。很多朋友会360云台旋转接入米家,百元体验xiaovv智能摄像机心享版家用智能摄像机凭借其安装简单操控便捷等优势受到了越来越多朋友的喜爱,尤其对于家中有老人孩子经常外出或独居女性来说,一台家用摄像机不仅方便沟通联系,对家庭的安全防护也有着积极的作用。