SQL Artisan多层查询条件嵌套功能(转)


在实际开发过程中我们经常面对一些查询或统计子表信息,对于一层处理还是比较简单,如果二层、三层等或更多时这个时候编写出来的条件就比较复杂和容易出现编写错误的情况。SQL Artisan字段对象除了提供灵活的比较运算功能外,对象的In方法还提供N层条件嵌套的功能,让你在构造查询条件更灵活。

以MSSQL的NorthWind为例:

查询指定雇员在某段时间的销售金额。

处理的表:Employees,Orders,Order Details

在实现过程可以通过表关联查询或直接对目标表进行查询,对目标表直接进行查询就必须把父表的条件以嵌套的方式添加到当前查询条件中。 字串8

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 & 字串3

             Orders._OrderDate.At(Orders.TBL) >= DateTime.Parse("1997-7-1")& 字串3

            Orders._OrderDate.At(Orders.TBL) <= DateTime.Parse("1997-8-1");

     ds = query.ExecuteDataSet();


SQL方法二:

       SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM [Order Details]  where OrderID in (select OrderID from Orders where ( ( ( OrderDate >= '1997-7-1'And OrderDate < '1997-8-1' )  And EmployeeID in (select EmployeeID from Employees where ( EmployeeID = 3 )) ) )) 

 
SQL Artisan方法二: 字串2

IQuery query = session.CreateQuery(OrderDetails.TBL); 字串2

query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};

     query.Expreesion = OrderDetails._OrderID.In(Orders.TBL,Orders._OrderID,

              Orders._OrderDate >= DateTime.Parse("1997-7-1") &

              Orders._OrderDate < DateTime.Parse("1997-8-1") &

     Orders._EmployeeID.In(Employees.TBL,Employees._EmployeeID,Employees._EmployeeID ==3));

     System.Data.DataSet ds = query.ExecuteDataSet(); 字串8 

从以上代码可以看到SQL Artisan组件通过字段对象的In方法方便灵活地把多层条件嵌套起来,在编写这么烦琐的查询条件时用字符串拼揍SQL语句对开发人员来说并不是什么恶梦,但在人手检测其合法性上也是个非常头痛的问题;何况很多时候要面对更复杂的查询条件。 字串1

SQL Artisan给你所带来的是完全对象化的条件编写方式并提供开发环境的编译检测,大大提高了条件的编写效率和质量。

其实SQL两个方法的的SQL语句都是通过运行SQL Artisan方法过程中截取的.

 相应例子下载 




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/11/04/948954.html,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值