В реальном процессе разработки мы часто сталкиваемся с некоторыми запросами или статистической информацией подтаблицы. Для одного уровня обработки это относительно просто. Если есть два уровня, три уровня и т. д. или более, условия, написанные на этом этапе, будут. быть более сложной и склонной к ошибкам в написании ситуации. Помимо предоставления гибких функций операции сравнения, объект поля SQL Artisan также предоставляет функции вложения условий N-уровня в методе объекта In, что позволяет вам быть более гибкими при построении условий запроса.
Возьмем в качестве примера MSSQL NorthWind:
запросим объем продаж указанного сотрудника за определенный период времени.
Обработанные таблицы: «Сотрудники», «Заказы», «Сведения о заказе».
В процессе реализации вы можете выполнить запрос через ассоциацию таблиц или напрямую запросить целевую таблицу. Чтобы напрямую запросить целевую таблицу, вы должны добавить условия родительской таблицы к текущим условиям запроса. вложенный способ.
Сотрудник.Сотрудник->Orders.OrderDate->Sum(Сведения о заказе) выполняет обратное вложение условий.
Ниже представлена реализация двух методов запроса в рамках операторов SQL и компонентов SQL Artisa.
(Код используется только для выражения функций компонента SQL Artisan, и другие проблемы, существующие в самом операторе SQL, обсуждаться не будут)
Первый метод SQL:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Сотрудники INNER JOIN Orders ON Сотрудники.EmployeeID= Orders.EmployeeID INNER JOIN [Сведения о заказе] ON Orders.OrderID=[Сведения о заказе].OrderID где ( ( Сотрудники.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) И 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 = Сотрудники._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:
ВЫБЕРИТЕ Sum(UnitPrice*Quantity*(1-Discount)) FROM [Сведения о заказе], где OrderID in (выберите OrderID из Orders где ( ( ( OrderDate >= '1997-7-1'And OrderDate < '1997-8) -1') и идентификатор сотрудника (выберите идентификатор сотрудника из списка сотрудников, где (ИД сотрудника = 3)) )) )
Второй метод SQL Artisan:
запрос 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(Employes.TBL,Employees._EmployeeID,Employes._EmployeeID ==3));
System.Data.DataSet ds = query.ExecuteDataSet();
Из приведенного выше кода видно, что компонент SQL Artisan удобно и гибко вкладывает многоуровневые условия посредством метода In объекта поля. Разработчикам неплохо было бы использовать строки для написания операторов SQL при написании таких громоздких операторов. условия запроса Dream, но проверять его легитимность вручную также очень сложно, не говоря уже о том, что нам часто приходится сталкиваться с более сложными условиями запроса;
SQL Artisan предлагает вам полностью объектно-ориентированный способ написания условий и обеспечивает компиляцию и тестирование среды разработки, что значительно повышает эффективность и качество записи условий.
Фактически, операторы SQL двух методов SQL перехватываются при запуске метода SQL Artisan.
.