|
在实际开发过程中我们经常面对一些查询或统计子表信息,对于一层处理还是比较简单,如果二层、三层等或更多时这个时候编写出来的条件就比较复杂和容易出现编写错误的情况。SQL Artisan字段对象除了提供灵活的比较运算功能外,对象的In方法还提供N层条件嵌套的功能,让你在构造查询条件更灵活。
以MSSQL的NorthWind为例:
查询指定雇员在某段时间的销售金额。
处理的表:Employees,Orders,Order Details
在实现过程可以通过表关联查询或直接对目标表进行查询,对目标表直接进行查询就必须把父表的条件以嵌套的方式添加到当前查询条件中。
Employee.Employee->Orders.OrderDate-> Sum(Order Details)作一个反向条件嵌套。
以下是两种查询方法在SQL语句和SQL Artisa组件下的实现。
(代码只是用于表达SQL Artisan组件的功能,对于SQL语句本身存在的其他问题不作讨论)
SQL方法一:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID INNER JOIN [Order Details] ON Orders.OrderID=[Order Details].OrderID where ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) And Orders.OrderDate <= '1997-8-1')
SQL Artisan方法一:
query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Orders._EmployeeID)&
Orders.TBL.INNER(OrderDetails.TBL,Orders._OrderID));
query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};
query.Expreesion = Employees._EmployeeID.At(Employees.TBL) ==3 & [1] [2] [3] 下一页 更多精彩:学习网->http://www.haohao888.com.cn 网络编程->http://www.51wlpc.com 电脑设备->http://www.xpmaster.cn
|