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

    在轻量级数据持久层Seaking.PL简介及建议征集中,已经对Seaking.PL(以下简称PL)进行了简单的介绍,并对PL中的主要对象Session的使用进行了说明。本文将介绍PL中的另一个重要对象Query。(本文的部分用语及示例从轻量级数据持久层Seaking.PL简介及建议征集中承接而来)
    Query是数据查询对象,不具备Session对象的操作功能,但查询功能更加强大,包括对View(视图)的查询及对Join(关联)、Condition(条件)、Order(排序)、Alias(别名)等的支持。

使用说明:
1.声明及实例化。
同Session一样,Query对象不能用new进行实例化,而必须由DataProvider(数据提供者)对象产生。

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

参数可以是任何数据表名或视图名。示例中的Employee.tableName是Employee实体类所对应数据表的表名,等同于字符串“employee”。如果需要使用表的别名,可以如下声明:

Query query=dp.NewQuery(Employee.tableName,"em");

也可以在声明Query的实例后再指定Query的TableName属性值和TableAlias属性值:

Query query=dp.NewQuery();
query.TableName
=Employee.tableName;
query.TableAlias
="em";

不指定表的别名时,表的别名即是表名(下同)。
2.添加查询结果中的字段列表(Fields)。
 
query.Fields.Add(Employee.fieldName_Id);
query.Fields.Add(Employee.fieldName_Name);

参数是数据表或视图的字段名。如果需要指定字段的别名,可以如下声明:
 
query.Fields.Add(Employee.fieldName_Id,"emId");
query.Fields.Add(Employee.fieldName_Name,
"emName");

当使用联接查询时,表(或视图)、字段的别名是非常有用的。
如果不添加任何字段列表,Query将按照默认自动添加所有字段。
3.添加查询条件(Conditions)。
Query对象有一个非常重要的属性Conditions,用来指定查询条件。Conditions的使用相对复杂,将在下一篇中单独说明。
4.添加排列字段及排序方式(Orders)。
 
query.Orders.Add(Employee.fieldName_Id);

参数为排序字段的名称。Query默认的排序方式为升序(ASC),如果使用降序方式,必须显式指定:
 
query.Orders.Add(Employee.fieldName_Id,OrderKind.DESC);

可以添加多个排序字段,按照添加顺序分别为第一、第二……排序字段。
5.联接查询。
 
query.Joins.Add("sale");

参数为要联接的数据表名或视图名。如果需要指定别名,可如下声明:
 
query.Joins.Add("sale","mySale");

为便于区分,我们将Query的TableName所指的表(或视图)称为主表,将此处联接所指的表(或视图)称为联接表。
Query默认的联接方式是INNER JOIN,其他联接方式必须显示指定,如:
 
query.Joins["mySale"].JoinKind=JoinKind.LeftOuterJoin;

每个联接必须至少指定一个联接条件(OnCondition),否则将引发异常。
 
query.Joins["mySale"].AddOnCondition("id","employeeId");

第一个参数为主表的字段名,第二个参数为联接表的字段名。Query默认的联接方式为等值联接,其他联接方式必须显式指定,如:
 
query.Joins["mySale"].AddOnCondition("id","employeeId",CompareKind.Greater);

可以象对主表一样对联接表进行添加字段列表,添加查询条件等操作,如:
 
query.Joins["mySale"].Fields.Add("saleDate");
query.Joins[
"mySale"].Fields.Add("saleSum");

也可以根据联接表的字段对查询结果进行排序,与字段列表、查询条件不同的是,联接表的排序字段应该在Query中指定,如:
 
query.Orders.Add("mySale","saleDate",OrderKind.DESC);

可以看出,添加排序字段的操作同主表是一致的,但需要指定表名。事实上,添加主表的排序字段也可以使用这种格式,但主表的表名是可以省略的。
每一个Query可以添加一个或多个联接。
6.获取或填充数据集。
根据我们的需要做完以上的一项或多项工作后,便可以获取或填充数据集,得到我们需要的结果。

DataSet dataSet=query.GetDataSet();

DataSet dataSet=new DataSet();
query.FillDataSet(dataSet);

数据集中的表(DataTable)名为Query中所指定的TableAlias。

其他:
1.虽然Query对象的功能已相对强大,但仍无法满足一些复杂查询的要求,建议将复杂查询建立视图后使用。
2.为了便于使用者调试,Query对象提供了GetSelectString()方法,可以查看Query所生成的查询字符串。

结束
    轻量级数据持久层Seaking.PL简介及建议征集发布后,许多朋友给予了关注并发表了自己的看法,在此表示感谢。同时欢迎大家继续关注Seaking.PL并提出宝贵建议!

posted @ 2006-07-07 10:04  同一片海  阅读(2535)  评论(9编辑  收藏  举报