轻量级数据持久层Seaking.PL简介--ConditionCollection对象

    在轻量级数据持久层Seaking.PL简介及建议征集轻量级数据持久层Seaking.PL简介--Query对象中,我已经对轻量级数据持久层Seaking.PL(以下简称PL)进行了介绍,并对PL中的两个重要对象Session和Query的使用进行了简单的说明,本文将介绍PL中的另一个重要对象:ConditionCollection(条件集合)。
    ConditionCollection是PL在获取数据时对获取条件的定义,也可以称为获取标准。ConditionCollection对象支持的条件有:等于(EqualTo)、不等于(NotEqualTo)、大于(GreaterThan)、大于或等于(GreaterThanOrEqualTo)、小于(LessThan)、小于或等于(LessThanOrEqualTo)、为空(IsNull)、不为空(NotIsNull)、以此开始(StartWith,针对字符串)、以此结束(EndWith,针对字符串)、包含(Include,针对字符串)、包括(In)、字段值比较(FieldCompare)、条件组(ConditionGroup)以及自定义条件(Custom),条件之间的逻辑关系(Raletion)可以是“并且(AND)”或“或(OR)”。在Session中,ConditionCollection作为获取方法的一个参数使用,而在Query中,ConditionCollection以属性Conditions的形式出现,但其使用方法是一致的。
    与ConditionCollection相对应,PL中定义了Condition对象,但Condition对象具有一些特殊性,不需要、同时也不允许客户程序直接访问Condition对象,因此本文将不对Condition对象进行说明。

使用说明:
  
A.ConditionCollection在Query对象中的使用

首先实例化Query对象:

Query query=dp.NewQuery(Employee.tableName);


(注:本文中的示例是从本文开始所提到的两篇文章中承接而来,阅读以上两篇文章将有助于理解本文中的代码)
1.简单条件
其实并没有对简单条件的明确定义,可以直接将上述的前8种条件列入简单条件的范围。对于简单条件的使用,文字说明基本是多余的,以下是两个示例:

query.Conditions.AddEqualTo(Employee.fieldName_Id,10);
    //生成的SQL语句类似于SELECT * FROM employee WHERE Id=@Id1
query.Conditions.AddIsNull(Employee.fieldName_Age);
    //生成的SQL语句类似于SELECT * FROM employee WHERE age IS NULL


2.针对字符串的条件
包括StartWith、EndWith、Include三种,示例代码:

query.Conditions.AddStartsWith(Employee.fieldName_Name,"Mike");
//生成的SQL语句类似于SELECT * FROM employee WHERE name LIKE  @name1
//如果用非参数方式,则是SELECT * FROM employee WHERE name LIKE  'Mike%'


3.包括(In)
该条件将会生成一个逻辑关系为OR的条件组(下文将对条件组进行说明),示例代码:

query.Conditions.AddIn(Employee.fieldName_Id,10,11,15);


4.字段值比较(FieldCompare)
两个字段的比较关系,关系枚举包括:Equal,Greater,GreaterOrEqual,Less,LessOrEqual,NotEqual。

query.Conditions.AddFieldCompare("f1","f2",CompareKind.Equal);
//生成的SQL语句类似于SELECT * FROM employee WHERE f1=f2


5.条件组(ConditionGroup)
在很多时候,单纯的使用AND或OR都是不够的,因此就有了使用条件组的必要。条件组事实上是一种特殊的条件集合,具有与条件集合相同的使用方法,条件组可以并列或嵌套使用。示例代码:

query.Conditions.AddEqualTo(Employee.fieldName_Age,20);
query.Conditions.AddConditionGroup(
"group1");
query.Conditions.ConditionGroups[
"group1"].AddEqualTo(Employee.fieldName_Id,10);
query.Conditions.ConditionGroups[
"group1"].AddEqualTo(Employee.fieldName_Id,11);
query.Conditions.ConditionGroups[
"group1"].AddEqualTo(Employee.fieldName_Id,15);
query.Conditions.ConditionGroups[
"group1"].Raletion=ConditionRelation.OR;
//生成的SQL语句类似于SELECT * FROM employee WHERE age=@age1 AND (ID=@ID1 OR ID=@ID2 OR ID=@ID3)


该示例中的条件组事实上完成了上文In条件中示例代码的功能。
6.自定义条件(Custom)
对于以上条件无法满足的要求,可以用自定义条件实现,自定义条件的参数为WHERE子句中的条件字符串。示例代码:

query.Conditions.AddCustom("f1=f2+1");
    //生成的SQL语句类似于SELECT * FROM employee WHERE f1=f2+1


7.条件的逻辑关系
条件集合中各条件的逻辑关系默认为AND,如果使用OR关系需要显式指定。

query.Conditions.Raletion=ConditionRelation.OR;


B.ConditionCollection在Session对象中的使用:
    在轻量级数据持久层Seaking.PL简介及建议征集中,已经对Session对象的使用进行了说明,Session在获取实体集合、获取实体主键属性值的集合、获取或填充数据集时,可以使用ConditionCollection指定获取条件。以获取实体集合为例,首先实例化ConditionCollection对象并根据需要添加条件,然后将实例化的ConditionCollection对象用作Session对象获取方法的参数,以下是示例代码:

Session se=dp.NewSession();
ConditionCollection conds
=new ConditionCollection();
conds.AddEqualTo(Employee.fieldName_Age,
23);
ArrayList list
=se.LoadEntityList(typeof(Employee),conds);
    //获取age=23的Employee的实体集合


结束语

    至此,轻量级数据持久层Seaking.PL简介系列文章已经结束,希望您提出宝贵的建议。近期将在我的博客中提供Seaking.PL的下载,欢迎感兴趣的朋友继续关注。

原文地址:https://www.cnblogs.com/chinadhf/p/453103.html