![]() |
|
الدرس السابع والستون - مع linq - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم تقنية LinQ (http://vb4arb.com/vb/forumdisplay.php?fid=204) +--- الموضوع : الدرس السابع والستون - مع linq (/showthread.php?tid=5664) |
الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته . في الدرس السابق تعرفنا على اساسيات LINQ ، سنواصل في درسنا هذا استخدام التطبيقات المختلفة في هذه التقنية . *** تذكير سريع : المتغيرات غير المعرفة : احياناً تقوم بعمل جملة استعلام يكون الناتج فيها فئة لم تقم بتعريفها من قبل ، هذه هي واحدة من فوائد تقنية Implicitly Typed Local Variables التي تم شرحها سابقاً ، هذه الجملة كمثال : كود : var subset = تذكر أن باستطاعات استخدام تعبيرات لامبادا Lambda Expressions بدلاً من كتابة استعلام LINQ بالطريقة العادية . الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 كاتب المشاركة : أحمد جمال
ذكرنا في أول دروسناً ثلاث أنواع لل LINQ .1- LINQ TO DATAET : ال dataset كما اسلفنا تشكل صورة أو نسخة من قاعدة البيانات في الذاكرة ، لذا فهي بكل بساطة نقطة جيدة لنستخدم عليها استعلامات LINQ الخاصة بنا . 2- LINQ TO XML أما النوع الثالث فسنفرد له موضوعاً مستقلاً هو آخر مواضيعنا حول LINQ في الدرس القادم . الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 3- LINQ TO SQL : فئة من فئات LINQ موجهة خصيصاً لدعم SQL Server ، في العادة هي الأكثر استخداما وسنحاول التعرف عليها سريعاً في هذا الدرس . - البحث والاستعلام : تعرفنا عليه سابقاً ، هذا المثال مثلاً لاعادة الاسم وتاريخ التخرج على شكل فئة جديدة للأشخاص الذين يزيد عمرهم عن 30 سنة ويقطنون في مصر : كود : var query = from c in Employeeكل ما عليك هو فقط تعريف دالة تشابه Procedure لها نفس ال Attributes ، وهي ما يقوم بها الفيجوال ستوديو افتراضياً ، الآن كل ما عليك هو كتابة أمر بهذا الشكل ( استعلام يستقبل متغير واحد ) : كود : var c = db.ProceduresName("Egypt");إذا كان هناك جملة استعلام ستستخدمها لعدة مرات فليس من المنطقي جعل نظام قواعد البيانات يتعرف من جديد على الاستعلام كل مرة ، لذا توفر لنا نظم قواعد البيانات الحل لهذه النقطة ، أيضاً LINQ تقدم لنا ذات النظرية عبر ما يسمى باسم Compiled Query . فكرة ال Compiled Query ببساطة تعتمد على استخدام دالة CompiledQuery.Compile لعمل Compile لجملة الاستعلام ، الشكل التالي كمثال : كود : var c = CompiledQuery.Compile(كود : foreach ( var row in query(dc, "Egypt",22))لو فرضنا جملة الاستعلام التالية : كود : SELECT SUM( emp.salary ) AS TotalSalary FROM Employee emp Join Department dem ON emp.DepartmentID = dep.ID Group By dep.IDكود : var c = الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 استخدام جمل الاستعلام داخل LINQ : قد تجد نفسك مضطراً احياناً لاستخدام واحدة من مميزات جمل الاستعلام التقليدية مثل الأمر PIVOT ، على كل هذه هي الصيغة العام لتنفيذ جملة SQL داخل ال LINQ : - مثال منقول - : كود : var query = db.ExecuteQuery<EmployeeInfo>(@" With EmployeeHierarchy (EmployeeID, LastName, FirstName, ReportsTo, HierachyLevel) AS ( SELECT EmployeeID, LastName, ForstName, ReportsTo, 1 as HierarchyLevel FROM Employees WHERE ReportsTo IS NULL UNION ALL SELECT e.EmployeeID, e.LastName, e.FirstName, e.ReportsTo, eh.HierarchyLevel + 1 AS HierarchyLevel FROM Emplyees e INNER JOIN EmployeeHierarchy eh ON e.ReportsTo = eh.EmplyeeID ) SELECT * FROM EmployeeHierarchy ORDER BY HierarvhyLevel, LastName, FirstName" );الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 استخدام Inseret في LINQ: كود : var NewEmp = new Employee { [First Name] = "Ahmed", Age = 25, Countery="Egypt"};استخدام Update : كود : var EditEmp = db.Employee.Singleاستخدام Delete : كود : var deleteEmp = db.Employee.SingleSubmitChanges: بعد اي عملية للاضافة أو للحذف أو التعديل لا بد من استدعاء الدالة db.SubmitChanges() لتفعيل التغييرات في قاعدة البيانات . الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 التحديث بالتزامن في قاعدة البيانات : *** ال LINQ تتعامل بالوضع المنفصل وليس المتصل ، لذا ستجد له الكائن ChangeConflictExeption والذي ينتج عن تعارض عمليات التعديل على قاعدة البيانات بين عدة مستخدمين ، يمكن استعراض رسالة الخطأ بالشكل التالي : كود : tryيمكن ايضاً في الأمر SubmitChanges تحديد سلوك البرنامج في حالة حدوث تعارض مثل الشكل التالي : كود : Db.SubmitChanges(ConflictMode.FailOnFirstConflict); الدرس السابع والستون - مع linq - RaggiTech - 14-10-12 انشاء فئات LINQ TO SQL من خلال الفيجوال ستوديو : يمكنك الفيجوال ستوديو 2008 من انشاء LINQ TO SQL Classes يمكنك التحكم بها لاحقاً ، من الشاشة الأولى : بعد اختياره ، يمكنك انشاء علاقات وجداول جديدة او سحب قاعدة بيانات من ال Server Explorer ، لذا قم بفتح قاعدة البيانات الخاصة بنا وقم بالبدء بسحب الجداول ، ستجد الشكل العام التالي : الآن بكل بساطة ستلاحظ ان الفيجوال ستوديو قام بمساعدتك في انشاء Data Access Layer - لو كنت تتذكرها - ، ستجد تعريفات للدوال التالية مثلاً : كود : partial void InsertEmployee_info(Employee_info instance);إلى هنا تكون دروسنا المتعلقة ب LINQ وما يتبعها من قواعد البيانات قد انتهت ، ربما نعود لقواعد البيانات بصورة مبسطة مرة اخرى مع دروس الويب . والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |