実際の開発プロセスでは、クエリや統計サブテーブル情報に遭遇することがよくありますが、処理が 2 レベル、3 レベルなどであれば、このときに記述される条件は比較的単純です。より複雑になり、書き込みエラーが発生しやすくなります。 SQL Artisan フィールド オブジェクトは、柔軟な比較演算関数を提供するだけでなく、オブジェクトの In メソッドで N レベルの条件ネスト関数も提供するため、クエリ条件をより柔軟に構築できます。
MSSQL の NorthWind を例に挙げて、
特定の期間における指定された従業員の売上高をクエリします。
処理されるテーブル: 従業員、注文、注文詳細。
実装プロセス中に、テーブルの関連付けを通じてクエリを実行するか、ターゲット テーブルに直接クエリを実行できます。ターゲット テーブルに直接クエリを実行するには、親テーブルの条件を現在のクエリ条件に追加する必要があります。ネストされた方法。
Employee.Employee->Orders.OrderDate->Sum(OrderDetails) は、逆条件のネストを作成します。
以下は、SQL ステートメントと SQL Artisa コンポーネントでの 2 つのクエリ メソッドの実装です。
(このコードは SQL Artisan コンポーネントの機能を表現するためにのみ使用されており、SQL ステートメント自体に存在する他の問題については説明しません)
SQL メソッド 1:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN 注文 ON Employees.EmployeeID= Orders.EmployeeID INNER JOIN [注文詳細] ON Orders.OrderID=[注文詳細].OrderID where ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) And Orders.OrderDate <= '1997 -8-1')
SQL アーティザンのメソッド 1:
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()
;方法 2:
SELECT Sum(単価*数量*(1-割引)) FROM [注文詳細] where OrderID in (select OrderID from Orders where ( ( ( OrderDate >= '1997-7-1'And OrderDate < '1997-8) -1' ) そして EmployeeID in (select EmployeeID from Employees where ( EmployeeID = 3 )) ) ))
SQL アーティザンのメソッド 2:
IQuery query = session.CreateQuery(OrderDetails.TBL);
query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))}
; 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 が提供するのは、完全にオブジェクトベースの条件記述方法であり、開発環境のコンパイルとテストを提供します。これにより、条件記述の効率と品質が大幅に向上します。
実際、2 つの SQL メソッドの SQL ステートメントは、SQL Artisan メソッドを実行することによってインターセプトされます。
。