SmartPersistenceLayer 2.0 之 Condition篇

原理

       强大的Condition功能是SPL的一个特性,可以使用Condition完成绝大部分的条件定义,使用也是最广泛的,如RetrieveCriteria,UpdateCriteria,DeleteCriteria,Query等,只要用到查询条件的地方,都会使用此Condition类.

Condition的实例化方式:

RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Conditionc=rc.GetNewCondition();

UpdateCriteria uc=newUpdateCriteria (typeof(StudentEntity));

Conditionc=uc.GetNewCondition();

DeleteCriteria dc=newDeleteCriteria (typeof(StudentEntity));

Conditionc=dc.GetNewCondition();

Query q=newQuery(typeof(StudentEntity));

Condition c=q.GetQueryCondition();

Condition内部是and关系,Condition之间,是以”Or”的方式组合的

如:

RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Conditionc=rc.GetNewCondition();

c.AddEqualTo(StudentEntity.Name,”tintown”);

c.AddNotEqualTo(StudentEntity.Sex,’男’);

Conditionc2=rc.GetNewCondition();

c2.AddEqualTo(StudentEntity.Id,”1”);

这样会产生”(Name=’tintown’ andSex<>’男’) or Id=1”这样的结果.

常用条件

下面以RetrieveCriteriarc=new RetrieveCriteria(typeof(StudentEntity));

Condition c=rc.GetNewCondition();

AddEqualTo (=)

相等比较:会生成类似”where name=’tintown’”的语句, 例如:

c.AddEqualTo(“Name”,”tintown”);

AddGreaterThan(>)

大于比较:会生成类似” where price > 1000”的语句

c.AddGreaterThan(“Price”,1000);

AddGreaterThanOrEqualTo(>=)

大于等于比较: 会生成类似” where price >= 1000”的语句

c.AddGrearterThanOrEqualTo(“Price”,1000);

AddNotEqualTo(<>)

不等于比较: 会生成类似” where name<>’tintown’”的语句

c.AddNotEqualTo(“Name”,”tintown”);

AddLessThan(<)

小于比较: 会生成类似” where price < 1000”的语句

c.AddLessThan(“Price”,1000);

AddLessThanOrEqualTo(<=)

小于等于比较: 会生成类似” where price <= 1000”的语句

c.AddLessThanOrEqualTo(“Price”,1000);

AddMatch(like ‘%A%’)

匹配比较: 会生成类似” where name like ‘%刘%’”的语句

c.AddMatch(“Name”,”刘”);

AddMatchPrefix(like ‘A%’)

前匹配比较: 会生成类似” where name like ‘刘%”的语句

c.AddMatchPrefix(“Name”,”刘”);

AddIn(in (A))

IN比较: 会生成类似” where name in (‘K’,’ I’)”的语句

string[] where=new string[]{“K”,”I”}

c.AddIn(“Name”,where);

OrGroup条件类[2.0新增功能]

在常规中,我们注意到,很难实现A and B and ( C or D)这样的效果,所以在这里添加了OrGroup类。

OrGroup是指Or的组,在OrGroup内,关系都是Or,所以可以通过以下代码要实现:

RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity));

Condition c=rc.GetNewCondition();

c.AddEqualTo(….)                //条件A

c.AddEqualTo(….)                //条件B

OrGroup og=rc. GetNewOrGroup();   //实例一个OrGroup

og.AddEqualTo(…);                           //条件C

og.AddEqualTo(…);                           //条件 D

C和D形成一个Or组,这样就实现了A and B and ( C or D)

通过以上方式可以实现更强的条件定义

字段与字段比较[2.0新增功能]

为了字段与字段的比较,为此扩展了查询条件,

字段间相等AddEqualToField

c.AddEqualToField(“field1”,field2);

这会生成类似”where field1=field2”

字段间大于AddGreaterThanField

c. AddGreaterThanField (“field1”,field2);

这会生成类似”where field1>field2”

字段间大于等于AddGreaterThanOrEqualToField

c. AddGreaterThanOrEqualToField (“field1”,field2);

这会生成类似”where field1>=field2”

字段间不等于AddNotEqualToField

c. AddNotEqualToField (“field1”,field2);

这会生成类似”where field1<>field2”

字段间小于AddLessThanField

c. AddLessThanField (“field1”,field2);

这会生成类似”where field1<field2”

字段间小于等于AddLessThanOrEqualToField

c. AddLessThanOrEqualToField (“field1”,field2);

这会生成类似”where field1<=field2”

总结

SPL虽然提供了很强的条件定义功能,如果遇到特别复杂的条件,还是需要自己手写SQL语句进行查询的。

[置顶] SPL讲解(6)--Condition篇的更多相关文章

  1. [置顶] SPL讲解(4)--Criteria操作篇

    概念 以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的.如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和De ...

  2. [置顶] SPL讲解(7)--Query高级篇

    SmartPersistenceLayer 2.0 之Query高级查询篇 总述 在看了前面的功能后,大家都会考虑到多表之间的查询怎么办.在这里,我想先讲一下查询在应用系统中的复杂性/重要性/可行性. ...

  3. [知了堂学习笔记]_css3特效第二篇--行走的线条&&置顶导航栏

    一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: <div class="movingLines"> <img src=" ...

  4. css3特效第二篇--行走的线条&&置顶导航栏

    一.行走的线条. 效果图(加载可能会慢一点儿,请稍等...): html代码: <div class="movingLines"> <img src=" ...

  5. 让WPF的Popup不总置顶的解决方案

    使用WPF的Popup的时候会发现有一个问题,它总是会置顶,只要Popup的StayOpen不设置为False,它就一直呆在最顶端,挡住其他的窗口. 解决方案是继承Popup重新定义控件PopupEx ...

  6. [置顶] 创建GitHub技术博客全攻略

    [置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...

  7. About me & 一些置顶的博文

    About me 一只历史上最弱的 \(\text{hnoier}\) ... 身在 \(\text{hn}\) 弱校,除了在四大名校夹缝中生存,还要受到同校 \(\text{Julao}\) 的鄙视 ...

  8. Ionic-wechat项目边开发边学(四):可伸缩输入框,下拉刷新, 置顶删除

    摘要 上一篇文章主要介绍了ion-list的使用, ion-popup的使用, 通过sass自定义样式, localStorage的使用, 自定义指令和服务. 这篇文章实现的功能有消息的置顶与删除, ...

  9. thinkphp内置标签简单讲解

    thinkphp内置标签简单讲解 1.volist循环 name 需要遍历的数据 id 类似于foreach中 value offset 截取数据起始位置 length 截取数据的个数 mod 奇偶数 ...

随机推荐

  1. Unix/Linux环境C编程入门教程(42) 终端控制篇

    函数介绍 getopt(分析命令行参数) 相关函数 表头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const argv[ ...

  2. thinkjs初试

    背景          什么是thinkjs?thinkjs是奇舞团开源的一款NodejsMVC框架,该框架底层基于Promise来实现,很好的解决了Nodejs里异步回调的问题.我为什么会使用thi ...

  3. 第10讲- UI线程阻塞及其优化

    第10讲UI线程阻塞及其优化 .UI 阻塞demo (首先在activity_main.xml中放置两个button,分别命名为button1,button2) //首先设置一个button1用来进行 ...

  4. poj 3616 Milking Time(dp)

    Description Bessie ≤ N ≤ ,,) hours (conveniently labeled ..N-) so that she produces as much milk as ...

  5. Jquery radio checked

    Jquery radio checked     radio 1. $("input[name='radio_name'][checked]").val(); //选择被选中Rad ...

  6. Hug the princess(思维,位运算)

    Hug the princess Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...

  7. DreamWeaver文件保存时,提示"发生共享违例"问题的解决方法

    在学习牛腩老师的JS视频中,视频中的例子要求实现一个是23个3相乘的结果,在用Dreamweaver制作时,, <script language="javascript" t ...

  8. UVA 673 (13.08.17)

     Parentheses Balance  You are given a string consisting of parentheses () and []. Astring of this ty ...

  9. C#调用WebService实例和开发

    一.基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是 ...

  10. ora-24247:网络访问被访问控制列表(ACL)拒绝

    用dba账户使用下面脚本授予报错账户访问外部网络服务的权限,以SCOTT为例: BEGIN -- Only uncomment the following line if ACL "netw ...