في عملية التطوير الفعلية، غالبًا ما نواجه بعض الاستعلامات أو معلومات الجدول الفرعي الإحصائية. بالنسبة لمستوى واحد من المعالجة، يكون الأمر بسيطًا نسبيًا، إذا كان هناك مستويان، أو ثلاثة مستويات، وما إلى ذلك، أو أكثر، فستكون الشروط المكتوبة في هذا الوقت تكون أكثر تعقيدا وعرضة لأخطاء الكتابة. بالإضافة إلى توفير وظائف عملية مقارنة مرنة، يوفر كائن حقل SQL Artisan أيضًا وظائف تداخل الشرط على مستوى N في طريقة In الخاصة بالكائن، مما يسمح لك بأن تكون أكثر مرونة في إنشاء شروط الاستعلام.
خذ NorthWind الخاص بـ MSSQL كمثال:
استعلم عن مبلغ مبيعات موظف محدد خلال فترة زمنية معينة.
الجداول التي تمت معالجتها: الموظفون، الطلبات، تفاصيل الطلب،
أثناء عملية التنفيذ، يمكنك الاستعلام من خلال اقتران الجدول أو الاستعلام مباشرة عن الجدول الهدف، للاستعلام مباشرة عن الجدول الهدف، يجب عليك إضافة شروط الجدول الأصلي إلى شروط الاستعلام الحالية بطريقة متداخلة.
الموظف.الموظف->Orders.OrderDate->Sum(تفاصيل الطلب) يقوم بإجراء تداخل شرطي عكسي.
فيما يلي تنفيذ طريقتي الاستعلام ضمن عبارات SQL ومكونات SQL Artisa.
(يتم استخدام الكود فقط للتعبير عن وظائف مكون SQL Artisan، ولن يتم مناقشة المشكلات الأخرى الموجودة في عبارة SQL نفسها)
طريقة SQL الأولى:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM الموظفين INNER انضم إلى الطلبات على الموظفين.EmployeeID= Orders.EmployeeID INNER JOIN [تفاصيل الطلب] على Orders.OrderID=[تفاصيل الطلب].OrderID حيث ( ( Staffs.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) و تاريخ الطلب <= '1997 -8-1')
الطريقة
الأولى
لحرف SQL:
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))});
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()
; الطريقة الثانية:
حدد Sum(UnitPrice*Quantity*(1-Discount)) من [تفاصيل الطلب] حيث يوجد معرف الطلب (حدد معرف الطلب من الطلبات حيث ( (( OrderDate >= '1997-7-1'And OrderDate < '1997-8) -1' ) ومعرف الموظف في (حدد معرف الموظف من الموظفين حيث ( معرف الموظف = 3 )) ) ))
الطريقة الثانية لحرف SQL:
IQuery query = session.CreateQuery(OrderDetails.TBL);
query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))}
; Exreesion = 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 عند كتابة مثل هذه المرهقة شروط الاستعلام Dream، ولكن من الصعب جدًا التحقق يدويًا من شرعيتها، ناهيك عن أنه يتعين علينا في كثير من الأحيان مواجهة شروط استعلام أكثر تعقيدًا.
ما يقدمه لك SQL Artisan هو طريقة قائمة على الكائنات تمامًا لكتابة الشروط وتوفر تجميعًا واختبارًا لبيئة التطوير، مما يحسن بشكل كبير من كفاءة وجودة شروط الكتابة.
في الواقع، يتم اعتراض عبارات SQL لطريقتي SQL عن طريق تشغيل طريقة SQL Artisan.
.