En el proceso de desarrollo real, a menudo nos enfrentamos a algunas consultas o información de subtablas estadísticas para un nivel de procesamiento, si hay dos niveles, tres niveles, etc. o más, las condiciones escritas en este momento. ser una situación más compleja y propensa a errores de escritura. Además de proporcionar funciones de operación de comparación flexibles, el objeto de campo SQL Artisan también proporciona funciones de anidamiento de condiciones de nivel N en el método In del objeto, lo que le permite ser más flexible en la construcción de condiciones de consulta.
Tome NorthWind de MSSQL como ejemplo:
consulte el monto de ventas de un empleado específico durante un período de tiempo determinado.
Tablas procesadas: empleados, pedidos, detalles de pedidos
durante el proceso de implementación, puede consultar a través de la asociación de tablas o consultar directamente la tabla de destino. Para consultar directamente la tabla de destino, debe agregar las condiciones de la tabla principal a las condiciones de consulta actuales. una manera anidada.
Employee.Employee->Orders.OrderDate->Sum(Order Details) realiza un anidamiento de condiciones inversas.
La siguiente es la implementación de los dos métodos de consulta en declaraciones SQL y componentes SQL Artisa.
(El código solo se usa para expresar las funciones del componente SQL Artisan, y no se discutirán otros problemas existentes en la declaración SQL).
Método uno de SQL:
SELECT Sum(PrecioUnitario*Cantidad*(1-Descuento)) FROM Employees INNER UNIRSE a Órdenes ON Employees.EmployeeID= Orders.EmployeeID INNER JOIN [Detalles del pedido] ON Orders.OrderID=[Detalles del pedido].OrderID donde ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) Y Pedidos.FechaPedido <= '1997 -8-1')
Método uno de SQL Artisan:
consulta = 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))};
consulta.Expreesion = Empleados._EmployeeID.At(Empleados.TBL) ==3 &
Pedidos._OrderDate.At(Orders.TBL ) >= DateTime.Parse("1997-7-1")&
Orders._OrderDate.At
(Orders.TBL) <= DateTime.Parse("1997-8-1")
; Método 2:
SELECCIONE Suma(Precio unitario*Cantidad*(1-Descuento)) DESDE [Detalles del pedido] donde ID de pedido en (seleccione ID de pedido de Pedidos donde ( ( ( Fecha de pedido >= '1997-7-1'Y Fecha de pedido < '1997-8 -1') Y EmpleadoID en (seleccione EmpleadoID de Empleados donde (EmpleadoID = 3)))))
Método dos de SQL Artisan:
consulta 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();
En el código anterior, puede ver que el componente SQL Artisan anida de manera conveniente y flexible condiciones de varios niveles a través del método In del objeto de campo. No es una mala idea para los desarrolladores usar cadenas para deletrear declaraciones SQL al escribir cosas tan engorrosas. condiciones de consulta Sueño, pero también es un gran dolor de cabeza verificar manualmente su legitimidad, sin mencionar que muchas veces tenemos que enfrentar condiciones de consulta más complejas.
Lo que SQL Artisan le ofrece es una forma completamente basada en objetos de escribir condiciones y proporciona compilación y prueba del entorno de desarrollo, lo que mejora en gran medida la eficiencia y la calidad de las condiciones de escritura.
De hecho, las declaraciones SQL de los dos métodos SQL se interceptan ejecutando el método SQL Artisan.
.