العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 03-11-2010, 04:05 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس السابع والستون : مع linq - دورة .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

في الدرس السابق تعرفنا على اساسيات LINQ ، سنواصل في درسنا هذا استخدام التطبيقات المختلفة في هذه التقنية .

*** تذكير سريع : المتغيرات غير المعرفة :
احياناً تقوم بعمل جملة استعلام يكون الناتج فيها فئة لم تقم بتعريفها من قبل ، هذه هي واحدة من فوائد تقنية Implicitly Typed Local Variables التي تم شرحها سابقاً ، هذه الجملة كمثال :
كود PHP:
var subset 
from i in numbers 
where i 
10 
select i


*** تذكير آخر : استخدام Lambda Expressions مع LINQ :

تذكر أن باستطاعات استخدام تعبيرات لامبادا Lambda Expressions بدلاً من كتابة استعلام LINQ بالطريقة العادية .

ذكرنا في أول دروسناً ثلاث أنواع لل LINQ .

1- LINQ TO DATAET :
ال dataset كما اسلفنا تشكل صورة أو نسخة من قاعدة البيانات في الذاكرة ، لذا فهي بكل بساطة نقطة جيدة لنستخدم عليها استعلامات LINQ الخاصة بنا .

هذا الدرس للاستاذ محمد سامر سلو فيه تفصيل جيد لهذا الموضوع .
http://vb4arab.com/vb/showthread.php?t=12294

2- LINQ TO XML :
درس آخر للاستاذ محمد سامر حول هذا الموضوع .
http://vb4arab.com/vb/showthread.php?t=9126

أما النوع الثالث فسنفرد له موضوعاً مستقلاً هو آخر مواضيعنا حول LINQ في الدرس القادم .

3- LINQ TO SQL :

فئة من فئات LINQ موجهة خصيصاً لدعم SQL Server ، في العادة هي الأكثر استخداما وسنحاول التعرف عليها سريعاً في هذا الدرس .

- البحث والاستعلام :
تعرفنا عليه سابقاً ، هذا المثال مثلاً لاعادة الاسم وتاريخ التخرج على شكل فئة جديدة للأشخاص الذين يزيد عمرهم عن 30 سنة ويقطنون في مصر :
كود PHP:
var query from c in Employee
where c
.Age 30 
&& 
c.Countery == "Egypt" 
Select new { c.Namec.GraduationDate};
استدعاء Stored Procedures 
كل ما عليك هو فقط تعريف دالة تشابه Procedure لها نفس ال Attributes ، وهي ما يقوم بها الفيجوال ستوديو افتراضياً ، الآن كل ما عليك هو كتابة أمر بهذا الشكل ( استعلام يستقبل متغير واحد ) :

كود PHP:
var db.ProceduresName("Egypt");
Compiled Query 
إذا كان هناك جملة استعلام ستستخدمها لعدة مرات فليس من المنطقي جعل نظام قواعد البيانات يتعرف من جديد على الاستعلام كل مرة ، لذا توفر لنا نظم قواعد البيانات الحل لهذه النقطة ، أيضاً LINQ تقدم لنا ذات النظرية عبر ما يسمى باسم Compiled Query .

فكرة ال Compiled Query ببساطة تعتمد على استخدام دالة CompiledQuery.Compile لعمل Compile لجملة الاستعلام ، الشكل التالي كمثال :

كود PHP:
var CompiledQuery.Compile(
DataContext contextstring counteryNameint age) =>
from c in Employee 
where c
.Age age
&& 
c.Countery == counteryName 
select 
new { c.CustomerIDc.CompanyNamec.City } ); 
والآن يمكنك تجربة استخدامها لأكثر من مرة بتغيير البارميتر فقط ، والبحث في الاستعلام الذي تم عمل Compile له :

كود PHP:
 
foreach ( var row in query(dc"Egypt",22))
{
}
foreach ( var 
row in query(dc"USA",28))
{
}
foreach ( var 
row in query(dc"Saudi",38))
{

استخدام دوال في جملة الاستعلام :

لو فرضنا جملة الاستعلام التالية :

كود PHP:
SELECT SUMemp.salary ) AS TotalSalary FROM Employee emp Join Department dem ON emp.DepartmentID dep.ID Group By dep.ID 
نستطيع كتابتها بشكل LINQ بالشكل التالي :
كود PHP:
var 
from emp in db.Employee 
join dep in db
.Department 
on emp
.DepartmentID equals dep.ID 
into TotalSalary 
select TotalSalary
.Sumemp => emp.Salary ); 
استخدام جمل الاستعلام داخل LINQ :

قد تجد نفسك مضطراً احياناً لاستخدام واحدة من مميزات جمل الاستعلام التقليدية مثل الأمر PIVOT ، على كل هذه هي الصيغة العام لتنفيذ جملة SQL داخل ال LINQ :

- مثال منقول - :
كود PHP:
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" ); 
استخدام Inseret في LINQ:
كود PHP:
var NewEmp = new Employee { [First Name] = "Ahmed"Age 25Countery="Egypt"};
db.Employee.AddNewEmp ); 
في المثال السابق قمنا باضافة موظف جديد باسم أحمد وبعمر 25 سنة ومن مصر .

استخدام Update :

كود PHP:
 
var EditEmp db.Employee.Single
=> c.Countery == "Egypt" );
EditEmp.Age 30 
في المثال السابق قمنا بالتعديل لعمر كل الاشخاص من مصر ليصبح 30 سنة .

استخدام Delete :
كود PHP:
var deleteEmp db.Employee.Single
=> c.Age 50 );
db.Employee.RemovedeleteEmp ); 
في المثال السابق قمنا بحذف الموظفين الذين تزيد اعمارهم عن 50 سنة .

SubmitChanges:

بعد اي عملية للاضافة أو للحذف أو التعديل لا بد من استدعاء الدالة db.SubmitChanges() لتفعيل التغييرات في قاعدة البيانات .

التحديث بالتزامن في قاعدة البيانات :

*** ال LINQ تتعامل بالوضع المنفصل وليس المتصل ، لذا ستجد له الكائن ChangeConflictExeption والذي ينتج عن تعارض عمليات التعديل على قاعدة البيانات بين عدة مستخدمين ، يمكن استعراض رسالة الخطأ بالشكل التالي :
كود PHP:
try
{
Db2.SubmitChanges();
Break;

Catch ( 
ChangeConflictExeption ex

MessageBox.Showex.Message );
Db2.*******( somequery, *******Mode.KeepChanges ); 

هنا يحاول الاستعلام التنفيذ ، لو لم يستطع يظهر رسالة الخطأ ويحاول مع أمر ******* مرة أخرى .

يمكن ايضاً في الأمر SubmitChanges تحديد سلوك البرنامج في حالة حدوث تعارض مثل الشكل التالي :
كود PHP:
Db.SubmitChanges(ConflictMode.FailOnFirstConflict); 
Db.SubmitChanges(ConflictMode.ContinueOnConflict); 
وذلك من الفئة ConflictMode والتي لا تحتوي سوى على هذين العنصرين .

انشاء فئات LINQ TO SQL من خلال الفيجوال ستوديو :

يمكنك الفيجوال ستوديو 2008 من انشاء LINQ TO SQL Classes يمكنك التحكم بها لاحقاً ، من الشاشة الأولى :



بعد اختياره ، يمكنك انشاء علاقات وجداول جديدة او سحب قاعدة بيانات من ال Server Explorer ، لذا قم بفتح قاعدة البيانات الخاصة بنا وقم بالبدء بسحب الجداول ، ستجد الشكل العام التالي :



الآن بكل بساطة ستلاحظ ان الفيجوال ستوديو قام بمساعدتك في انشاء Data Access Layer - لو كنت تتذكرها - ، ستجد تعريفات للدوال التالية مثلاً :
كود PHP:
partial void InsertEmployee_info(Employee_info instance);
    
partial void UpdateEmployee_info(Employee_info instance);
    
partial void DeleteEmployee_info(Employee_info instance); 
الآن يمكنك كتابة كود كل منها لتسهيل الأمر لاحقاً على باقي مطورين الفريق ...

إلى هنا تكون دروسنا المتعلقة ب LINQ وما يتبعها من قواعد البيانات قد انتهت ، ربما نعود لقواعد البيانات بصورة مبسطة مرة اخرى مع دروس الويب .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الواحد والستون ADO.net - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 05-03-2011 10:47 PM
الافتراضي الدرس السادس والستون : العودة إلى linq - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 07-11-2010 10:05 AM
الدرس الخامس والستون : ADO.net - الوضع المنفصل - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 03-11-2010 03:37 PM
الدرس الرابع والستون : ADO.net - الوضع المنفصل - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 03-11-2010 03:32 PM
الدرس السابع والخمسون : Wpf 2d - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 2 03-05-2010 06:57 PM

استضافة الحياة

الساعة الآن 12:25 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz