在實際開發過程中我們經常面對一些查詢或統計子表信息,對于一層處理還是比較簡單,如果二層、三層等或更多時這個時候編寫出來的條件就比較復雜和容易出現編寫錯誤的情況。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 &
Orders._OrderDate.At(Orders.TBL) >= DateTime.Parse("1997-7-1")&
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方法二:
IQuery query = session.CreateQuery(OrderDetails.TBL);
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();
從以上代碼可以看到SQL Artisan組件通過字段對象的In方法方便靈活地把多層條件嵌套起來,在編寫這么煩瑣的查詢條件時用字符串拼揍SQL語句對開發人員來說并不是什么惡夢,但在人手檢測其合法性上也是個非常頭痛的問題;何況很多時候要面對更復雜的查詢條件。
SQL Artisan給你所帶來的是完全對象化的條件編寫方式并提供開發環境的編譯檢測,大大提高了條件的編寫效率和質量。
其實SQL兩個方法的的SQL語句都是通過運行SQL Artisan方法過程中截取的.
相應例子下載
新聞熱點
疑難解答