Dans le processus de développement actuel, nous sommes souvent confrontés à des requêtes ou à des informations statistiques sous-tableaux. Pour un niveau de traitement, c'est relativement simple s'il y a deux niveaux, trois niveaux, etc. ou plus, les conditions écrites à ce moment-là. être plus complexe et sujet aux erreurs d’écriture. En plus de fournir des fonctions d'opération de comparaison flexibles, l'objet champ SQL Artisan fournit également des fonctions d'imbrication de conditions de niveau N dans la méthode In de l'objet, vous permettant d'être plus flexible dans la construction de conditions de requête.
Prenons l'exemple de NorthWind de MSSQL :
interrogez le montant des ventes d'un employé spécifié pendant une certaine période de temps.
Tables traitées : Employés, Commandes, Détails de la commande
Au cours du processus d'implémentation, vous pouvez interroger via une association de table ou interroger directement la table cible, vous devez ajouter les conditions de la table parent aux conditions de requête actuelles. une manière imbriquée.
Employee.Employee->Orders.OrderDate->Sum(Order Details) effectue une imbrication de conditions inverses.
Ce qui suit est l'implémentation des deux méthodes de requête sous les instructions SQL et les composants SQL Artisa.
(Le code est uniquement utilisé pour exprimer les fonctions du composant SQL Artisan, et les autres problèmes existant dans l'instruction SQL elle-même ne seront pas abordés)
Première méthode SQL :
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID INNER JOIN [Détails de la commande] ON Orders.OrderID = [Détails de la commande].OrderID où ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) Et Commandes.OrderDate <= '1997 -8-1')
Première méthode 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()
; Méthode 2 :
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM [Order Details] Where OrderID in (sélectionnez OrderID dans Orders Where ( (( OrderDate >= '1997-7-1'And OrderDate < '1997-8 -1' ) Et EmployeeID dans (sélectionnez EmployeeID parmi Employees où ( EmployeeID = 3 )) ) ))
Deuxième méthode SQL Artisan :
requête IQuery = 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();
À partir du code ci-dessus, vous pouvez voir que le composant SQL Artisan imbrique de manière pratique et flexible les conditions à plusieurs niveaux via la méthode In de l'objet field. Ce n'est pas une mauvaise idée pour les développeurs d'utiliser des chaînes pour épeler des instructions SQL lors de l'écriture d'une telle lourdeur. conditions de requête Dream, mais c'est aussi un véritable casse-tête de vérifier manuellement sa légitimité, sans compter que nous devons souvent faire face à des conditions de requête plus complexes ;
Ce que SQL Artisan vous apporte est une méthode d'écriture de conditions entièrement basée sur les objets et fournit une compilation et des tests de l'environnement de développement, ce qui améliore considérablement l'efficacité et la qualité des conditions d'écriture.
En fait, les instructions SQL des deux méthodes SQL sont interceptées en exécutant la méthode SQL Artisan.
.