sqlsugar mysql连接字符串_SQLSugar动态拼接Lambda表达式(顺便提一个sqlsugar框架的bug)...

.NET Core项目使用SQLSugar进行ORM操作时,遇到动态表和动态列的挑战。对于动态表,可以通过AS方法映射不同表但列名相同的实体。动态列处理时,常规的Lambda表达式无法满足需求,而通过反射获取属性值的方法在SQLSugar中不适用。官方示例提供了一种解决方案,但当需要OR条件组合时,需使用conditionalCollections()。此外,文章指出SQLSugar的一个Bug,当Oracle中参数名超过30个字符时会导致错误,建议在必要时手动拼接WHERE条件来规避此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.netcore项目使用了ORM实体映射的方式,通过操作实体类进行数据库交互。

SQLSugar其中涉及动态表以及动态列的问题,请参考zwb我总结的一点心得,简单明了:

动态表--相同列名不同表,可使用一个实体类映射。查询代码写法:this.Queryable().AS("D_PRJ"+UNITSYS). 增删改查皆可以。

动态列--传统的list.where(p=>p.xx=="zwb")这种lambda表达式的写法已经不能满足 xx是个字符串变量的情况,而通过实体属性反射来处理如下:

list.where(p=>p.GetType().GetProperty("xx").GetValue().ToString()=="aa")在LinQ中好用,但sqlsugar并不支持。那么如何通过sqlsugar解决动态列的问题呢?请大家继续往下看:

http://www.codeisbug.com/Doc/8/1127这是官网示例。代码使用场景:

a2c637eceea824031f275a39e466f4b4.png

对List集合的ADD添加的条件之间的关系是and的关系

但当我们想tidi把一些条件用or的关系连接在一起怎么处理?官网中用到了conditionalCollections(){}

这个所谓的集合就相当于sql里的括号,可以将几个条件括在里面,里面的条件可以用or连接,避免与外面条件的耦合,其中wheretype可以是or或者and

最后提一个sqlsugar的Bug,我觉得sqlsugar开发者还不知道这个问题吧。不爱打字了 直接上图吧:

c6a2a99523e56fc24d06efe2fd3fac53.png

如果我们进行搜索条件拼装时,检索条件多个时,会导致oracle错误。当我们输入一个条件模糊查询时候可以,多个条件模糊查询就报错为什么呢?如下:

c5c2f9d6f975527fcdb561df6cf978b6.png

如上图:实际我们用代码动态拼接的所有条件在sqlsugar内部是这样为我们生成可执行sql语句的,它会为每一个参数设置一个动态形成的参数名称,名称组成如下:固定前缀+列名+流水号后缀。

最后的流水号是动态生成的,参数越多,流水号越大,当这个参数长度超过30的时候,oracle就会报上面那个错误。

遇到问题要解决,这明显是sqlsugar内部机制的bug问题,但坑还要有人填。填坑很简单,动态循环自己拼接where条件吧,虽然我一向并不建议在sqlsuger中写sql语句,但是没办法。

http://www.codeisbug.com/Doc/8/1127

原文:https://www.cnblogs.com/zwbsoft/p/12841051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值