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. MVC 自定义错误处理

    1. Application_Error namespace Libaray.Web{ public class MvcApplication : System.Web.HttpApplication ...

  2. Roman numerals

    Roman numerals 罗马数字的题目, 注意几个关键的数字即可: (100, 400, 500, 900) -> ('C', 'CD', 'D', 'CM'); (10, 40, 50, ...

  3. exe可执行程序及堆栈分配(转载)

    可执行程序的内存分布 GNU编译器生成的目标文件默认格式为elf(executive linked file)格式,这是Linux系统所采用的可执行链接文件的通用文件格式.elf格式由若干个段(sec ...

  4. OCP-1Z0-051-题目解析-第6题

    6. Examine the structure of the SHIPMENTS table: name                    Null        Type PO_ID      ...

  5. 创建一个jQuery UI的垂直进度条效果

    日期:2013-9-24  来源:GBin1.com 在线演示 缺省的jQuery UI只有水平的进度条效果,没有垂直的进度条效果,仅仅重新定义JQuery UI的CSS不能解决这个问题. 这里我们扩 ...

  6. Golang性能调优入门

    如何利用golang自带的profile工具进行应用程序的性能调优,前一段时间我做的日志分析系统在线上遇到了一个问题,就是分任务的系统down机了,日志处理延迟了10几个小时,这个时候任务分发系统重启 ...

  7. Java内存区域和GC机制篇

    Java内存区域和GC机制一.目录 1.Java垃圾回收概括 2.Java内存区域 3.Java对象的访问方式 4.Java内存访问机制 5.Java GC 机制 6.Java垃圾收集器 二.Java ...

  8. Firebase远程更新应用

    能打造出色的应用不意味着一定能在商业上取得成功,两者之间还有许多工作要做,绝不能简单发布应用后就宣告“收工”.您需要能迅速根据用户反馈作出调整.测试新功能,以及向用户提供他们最关注的内容. Fireb ...

  9. Linux UGO和ACL权限管理

    自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序.文件.进程)的拥有者可以任意修改或者授予此对象相应的权限.Linux的UGO(User, Grou ...

  10. DotDensityRenderer

    关键之处在于获取每个点所代表的的值 这里使用geodatabase类库中idatastatistic接口进行统计字段,再将结果传递给esrisysytem.istatisticsResult进行. 需 ...