zoukankan      html  css  js  c++  java
  • SQLSugar动态拼接Lambda表达式(顺便提一个sqlsugar框架的bug)

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

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

    动态表--相同列名不同表,可使用一个实体类映射。查询代码写法:this.Queryable<D_PRJ>().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这是官网示例。代码使用场景:

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    如何把List 里的数据读出来 赋值给String?
    javascript打印、设置、预览
    SQL通配符
    C# GUID的使用
    Winform 多国语言窗体的设计以及.NET中资源文件的使用
    Winfrom 重新登录
    C# string.Format()
    聚合函数的应用(转)
    C# out和ref关键字
    性能测试工具Gprof
  • 原文地址:https://www.cnblogs.com/zwbsoft/p/12841051.html
Copyright © 2011-2022 走看看