No processo de desenvolvimento real, muitas vezes enfrentamos algumas consultas ou informações estatísticas de subtabelas. Para um nível de processamento, é relativamente simples. Se houver dois níveis, três níveis, etc. ou mais, as condições escritas neste momento serão. ser mais complexa e propensa a erros de escrita. Além de fornecer funções flexíveis de operação de comparação, o objeto de campo SQL Artisan também fornece funções de aninhamento de condições de nível N no método In do objeto, permitindo que você seja mais flexível na construção de condições de consulta.
Tomemos como exemplo o NorthWind do MSSQL:
consulte o valor das vendas de um funcionário específico durante um determinado período de tempo.
Tabelas processadas: Funcionários, Pedidos, Detalhes do Pedido
Durante o processo de implementação, você pode consultar por meio de associação de tabela ou consultar diretamente a tabela de destino. Para consultar diretamente a tabela de destino, você deve adicionar as condições da tabela pai às condições de consulta atuais. uma maneira aninhada.
Employee.Employee->Orders.OrderDate->Sum(Order Details) faz um aninhamento de condição reversa.
A seguir está a implementação dos dois métodos de consulta em instruções SQL e componentes SQL Artisa.
(O código é usado apenas para expressar as funções do componente SQL Artisan, e outros problemas existentes na instrução SQL em si não serão discutidos)
Método SQL um:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN Orders ON Employees.EmployeeID= Orders.EmployeeID INNER JOIN [Detalhes do pedido] ON Orders.OrderID=[Detalhes do pedido].OrderID onde ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) E Pedidos.OrderDate <= '1997 -8-1')
Método um do SQL Artisan:
query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Orders._EmployeeID)&
Orders.TBL.INNER
(OrderDetails.TBL,Orders._OrderID));
{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1
-OrderDetails._Discount
))};
) >= DateTime.Parse("1997-7-1")&
Orders._OrderDate.At
(Orders.TBL) <= DateTime.Parse("1997-8-1")
; Método 2:
SELECIONE Sum(UnitPrice*Quantity*(1-Discount)) FROM [Detalhes do pedido] onde OrderID em (selecione OrderID em Orders where ( ( ( OrderDate >= '1997-7-1'And OrderDate < '1997-8 -1' ) E EmployeeID em (selecione EmployeeID em Employees onde ( EmployeeID = 3 )) ) ))
Método dois do 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))
;
No código acima, você pode ver que o componente SQL Artisan aninha condições de vários níveis de maneira conveniente e flexível por meio do método In do objeto de campo. Não é uma má ideia que os desenvolvedores usem strings para soletrar instruções SQL ao escrever essas instruções complicadas. condições de consulta Dream, mas também é uma grande dor de cabeça verificar manualmente sua legitimidade, sem contar que muitas vezes temos que enfrentar condições de consulta mais complexas;
O que o SQL Artisan traz para você é uma forma de escrever condições totalmente baseada em objetos e fornece compilação e teste do ambiente de desenvolvimento, o que melhora muito a eficiência e a qualidade das condições de escrita.
Na verdade, as instruções SQL dos dois métodos SQL são interceptadas executando o método SQL Artisan.
.