天天看点

Git.Framework 框架随手记--ORM条件组合

  一. SQL 条件分析

    对于SQL每个人应该都很熟悉,这是基础的基础,如果没有使用过SQL的本文可以直接忽略了。先简单看看一个SQL语句,我们根据SQL语句的规则理解Where()方法

    SQL语句中后面起始条件关键字必定是WHERE,这个毋庸置疑。如果后面要跟其他的条件我们就可以使用AND 或者 OR 关键字将其连接起来。SQL条件语句基本可以归纳为如下

    再看看一个稍微复杂点的SQL语句,代码如下

    语句是什么意思,看官一看就能够明白,我们看重点部分 ,这个SQL语句使用了 () 运算符, 两个条件 () 和  [IsDelete]=@IsDelete 使用AND连接的,在()运算符中又是多个单个表达式的组合。

    在看看单个表达式的效果

    表达式可以抽象理解为  字段 [运算符] 值 这种情况。在SQL中有很多运算符,这里我们看看详细:

    当然其他的运算符(AND OR 也称作运算符),我们先做一些简单的。

    以上问题说的比较含糊,表述可能不清晰,但是大家应该都能够明白其大概意思,从以上的比较可以看出其实SQL是有一定规则的。

  二. 框架中提供的条件方法

    在做ORM映射的过程中,我们对条件操作的运算符也做了相应的映射,其映射为了一个枚举值

Git.Framework 框架随手记--ORM条件组合
Git.Framework 框架随手记--ORM条件组合

ECondition 运算符枚举

    其中有些枚举值有点奇怪,当时为了配合理解SQL语法,其中在对() 运算的时候采用了特殊的标记,我们会使用特定的方法来代替。

    这个地方有点意思,我们将WHERE,AND,OR三个连接运算符映射成了相应的方法,其中更加奇怪的是有OrBegin(),WhereBegin(),AndBegin(),Begin(),End()几个方法。上面在分析SQL的时候主要到了() 运算符,这几个方法就是为了对()特殊优待,当时设计的时候为了更好的理解() ,将()分为了两部分 ,分别对应 Begin() ,End(); 也就是前 "(" 和 ")" 而其余的几个就是对其扩展 。

    其实也就可以立即为 WhereBegin(); ANND();  OR (); END(); 这种调用就好比将写SQL的手法转化为命令模式。 很多对此不能够很好的理解,也对此嗤之以鼻,不要紧这只是理解的角度不一样而已,而且在对WHERE等方法向Lambda表达式转化的时候强制不能使用复合条件,避免Linq和EF中的太多层次的嵌套导致自己也晕了。 

    对于上面的一些方法我们还做了一些扩展,主要扩展方法如下:

   三. 使用实例

    这个条件语句在之前已经解析过了,就是WHERE [IsDelete]= (int)EIsDelete.NotDelete .

    上面这两段代码其实是等价的,只是后一种是使用Lambda表达式来解析的,最终的结果都一样。

     上面的方法调用最终生成的SQL如上,我们中重点看WHERE后面的,如果对比起来应该都能够理解了

    

关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

联系方式: 个人QQ  821865130 ; 仓储技术QQ群 88718955,142050808 ;