在中建立复杂的灵活的查询命令物业

商业专用设备2021年09月06日

建立计算查询

如果你想对你的数据库执行一个计算查询。你能使用SelectCount方法如同下面显示的:

lectCount();

在更加复杂的计算查询中,你可能想使用GROUP BY语句。看一下下面的例子,它显示了如何使用GroupBy和AddHaving方法。

SelectQueryBuilder query = new SelectQueryBuilder();

lectColumns(\"count(*) AS Count\", \"ShipCity\");

lectFromTable(\"Orders\");

oupBy(\"ShipCity\");

dHaving(\"ShipCity\", tEquals, \"Amsterdam\");

dOrderBy(\"count(*)\", scending);

上面的代码选择了每个城市的订单数,并用订单数目排序,不考虑来自制Amsterdam的订单,BuildQuery方法的输出结果应当是:

SELECT count(*) AS Count, ShipCity

十、Theatro FROM Orders

GROUP BY ShipCity

HAVING (ShipCity \'Amsterdam\')

ORDER BY count(*) DESC

复杂的Where语句

如果你曾经用过微软的Access或SQL Server的内置的查询生成器的话,是否惊讶你能建立和代码一样的包含多层ANDs和Ors,并没有关心()符号的位置的查询?是的?我也能!

你能使用SelectQueryBuilder类实现!你能加多层的WHERE语句到你的查询。缺省,所有对dWhere的调用被放在查询的第一层上。你可以把它比作SQL Server查询生成器的’Criteria’列;第二、三、四层等相应地对应于’Or…’列。

看一下下面的SQL Server查询生成器的快照,通过它我能快速地把简单的假的SELECT语句放在一起来:

如你看到的,我创建一个查询,它选择所有在日期之前的客户’VINET’的订单,和所有日期之前或日期之后的客户’TOMSP’的订单(请不要问为什么有人想查询某个人的订单,这仅仅是一个 例子)。这个查询能够建立:

SelectQueryBuilder query = new SelectQueryBuilder();

lectFromTable(\"Orders\");

// Add \'Criteria\' column to level 1

dWhere(\"CustomerID\", uals,\"VINET\", 1);

dWhere(\"OrderDate\", ssThan,new DateTime(2005,1,1), 1);

// Add first \'Or...\' column to level 2

dWhere(\"CustomerID\", uals, \"TOMSP\", 2);

dWhere(\"OrderDate\", ssThan,new DateTime(2004,6,30), 2);

// Add second \'Or...\' column to level 3

dWhere(\"CustomerID\", uals,\"TOMSP\", 3);

dWhere(\"OrderDate\", eaterThan,new DateTime(2006,1,1), 3);

当调用 BuildQuery时,所有定义的层将被OR到一起,几乎和SQL Server生成的一样。

如果你到所产生的语句接近一样时,想让查询更复杂,你可能会说“我的放两个随后的语句一起放在一个语句中,在两个日期间使用OR”。你能够这样作。在SQL Server查询生成器中,这个查询看起来像:

同样,它也可能使用SelectQueryBuilder通过创建’嵌套的WHERE子句’来实现。

SelectQueryBuilder query = new SelectQueryBuilder();

lectFromTable(\"Orders\");

// Add \'Criteria\' column to level 1

dWhere(\"CustomerID\", uals, \"VINET\", 1);

dWhere(\"OrderDate\", ssThan,

new DateTime(2005,1,1), 1);

// Add \'Or...\' column to level 2

dWhere(\"CustomerID\",

uals, \"TOMSP\", 2);

// Add the date selection clause

WhereClause clause =dWhere(\"OrderDate\", ssThan,

new DateTime(2004,6,30), 2);

// Add a nested clause to the captured clause

dClause(,

eaterThan, new DateTime(2006,1,1));

注意到我用了一个WhereClause对象,它由AddWhere调用返回。接着调用dClause创建一个嵌套的子句柄,并且选择通过指定来把它OR到第一个子句上。所产生的语句如下:

SELECT Orders.*

FROM Orders

WHERE

(

(CustomerID = \'VINET\')

AND (OrderDate \'2005/01/01 12:00:00\')

)

OR

(

(CustomerID = \'TOMSP\')

AND (OrderDate \'2004/06/30 12:00:00\' OR

OrderDate \'2006/01/01 12:00:00\')

)

请注意这个例子中日期包含’12:00:00’,这是因为我在DateTime构造体中忽略了时间。但这只要由于我的习惯。如果我使用new DateTime(2006,1,1,0,0,0),日期字符串将包含’00:00:00’。

结论

在介绍中我就提到,SelectQueryBuilder是CodeEngine框架的一部分。这个框架 也包含了DeleteQueryBuilder,UpdateQueryBuilder,InsertQueryBuilder。我在通过我的C#DAL产生器生成的代码中使用这些生成器。你能从上下载一份 框架DLL的拷贝。在这期间我也将发布其它的查询生成器的源代码。同时如果你有什么问题,评价或建议,请及时与我联系。查看本文来源

淄博男科正规医院
兰州包皮过长治疗哪家好
胃溃疡怎么治疗
相关阅读
上半年蜕变羽化成蝶 回顾辽宁男篮CBA夺冠之路

人民日报沈阳4月26日电题:全面自然而然,羽化成蝶 ——阜新女足CBA亚军之...

2023-10-23
关乎大资金动向!科创板“芯片”指数来了,42只样本股名单公布;上交所几大指数也调整,腾讯、美团等权重

A股、公司股票多个极其重要指标公布或修正,这意味着之外的大资金样式也...

2023-10-21
如果你的房子有这六大特性,不但居住舒适,而且升值有保障

如果你的小木屋有这六大特点,不但居长住地舒适,而且货币贬值有义务!每...

2023-10-02
朱雀基金年内三度增持金力永磁(06680)、中集安瑞科(03899) 持股百分比均超7%

今年以来,麒麟全额已三次入股金力永磁(06680),总计入股约132.1万股,涉资约...

2023-09-17
碧桂园成功发售5亿元公司债 票面利率4.5%

北京商报讯(记者 王寅浩)5月底20日隔日,万科发布公告称,失败出版2022年...

2023-09-16
读书丨齐一民《永别了,外企》:一部充满人性特征的商场前言

魏一民《光荣了,外企》:第一部充满著感受特点的街市回忆序文 【题传】...

2023-09-13
友情链接