LINQ
في متابعتي وقراءتي عن الـ ASP.NET لفت انتباهي أخر الأيام هي تقنية مايكروسوفت الجديدة للتعامل مع قواعد البيانات وهي LINQ, بدأت اقرأ مصادر عن هذه التقنية , فعلا شدت انتباهي وخاصة في التعامل مع ASP.NET فهي ممتازة جدا من رأيي الشخصي.
حبيت اطرح لكم هذا المقال البسيط إلي يوضح ما هي هذه التقنية وبعرض لكم بعض استخداماتها وبشكل بسيط طبعا , فأرجو إن تستمتعوا في القراءة .
ماهي هذه التقنية:
LINQ هي تقنية إحدى خواص الـ .NET 3.5 , و LINQ اختصار لـ language integrated query
وتمكننا من عمل Query للبيانات من قاعدة البيانات باستخدام لغات برمجة مثل C# VB مثل ماهي لغة SQL
خاصة للتعامل مع البيانات في قاعدة البيانات.
ماذا تفعل الـ LINQ
اقتباسBasically LINQ address the current database development model in the context of Object Oriented Programming Model
بكل بساطة انك عزيزي القارئ تعجل الوصول إلى الجداول كمثل أي مكونات لغة البرمجة سواء كنت تستخدم C# أو VB حيث ستلاحظ أسماء الجداول موجودة مع باقي الـ Method والمتغيرات الخ..
هل يوجد أنواع مختلفة إلى LINQ ؟؟
نعم عزيزي القارئ توجد ثلاث أنواع وهي مقسمة على النحو التالي:
* LINQ to Object {Queries performed against the in-memory data}
* LINQ to ADO.Net
o LINQ to SQL (formerly DLinq) {Queries performed against the relation database only Microsoft SQL Server Supported}
o LINQ to DataSet {Supports queries by using ADO.NET data sets and data tables}
o LINQ to Entities {Microsoft ORM solution}
* LINQ to XML (formerly XLinq) { Queries performed against the XML source}وبعد ذكر الأنواع ما يهمنا هو LINQ to SQL
ملاحظة:
LINQ ليست محصورة فقط مع الـ ASP.NET أو ما يسمى بـ Web Application فمن الممكن استخدامها مع Windows Application أيضا ,, ومثال على ذالك في رائي الشخصي الـ ADO.NET
ربما تكون المقدمه بسيطة وليست واضحة للبعض لكن مع قراءة المثال سوف تتضح النقاط
ملاحظة:
بما أني اكتب في قسم الـASP.NET سوف يكون شرحي مركز علي asp.net
ذكرت في السطور السابقة انك تجعل الجداول كأحد مكونات اللغة البرمجية التي تستخدمها أنت عزيزي القارئ
ماذا نفعل ألان:
دعنا عزيزي القارئ نقوم بعمل مشروع جديد ونعطيه أي اسم نريد وفي صفحة الـ Default ونضع Label Control في الصفحة ونجعل خاصية الـ Text تكون فارغة
بعدها نتجه إلى الكود البرمجي وطبعا سوف يكون حدث الـ page_load موجود مسبقا
نكتب في هذا الحدث الكود التالي :
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6 };
var nums = from r in numbers
select r;
foreach(int n in nums)
{
Label1.Text += n.ToString() + "<br />";
}راح نلاحظ النتيجة بتكون
0
1
2
3
4
5
6
في البداية طبعا عملت مصفوفة تشمل الارقام مثل الموضح في الكود
ويأتي جزء الـ Linq بعد تعريف المصفوفة
حيث var اختصار الى متغير وبعدهها تعريف اسم المتغير وهو كما كتبت في الكود السابق nums و ماذا حدث بعد رمز الـ يساوي ؟؟
هنا تبين لنا طريقة عمل الاستعلام بـ LINQ حيث from نستخدمها بمثل ما نقول من , و تعطي اسم وانا في مثالي كتبت r ,استخدمت in حيث تشير الى المكان المراد التعامل معاه سواء جدول او في حالتي انا المصفوفة
بمعنى اخر: السطر كأننا في بداية الامر نعرف متغير r من داخل المصفوفة
يأتي دور كلمة select وهي كما نعرف اختار , في هذه الحالة نختار المتغير r لآني ذكرت ماذا يعني المتغير r
الان اصبحنا متفقين على طريقة الاستعلام بـ LINQ
ملاحظة : يوجد تشابه في استخدام استعلام الـ LINQ و SQL لان توجد شروط متشابهة في الـ LINQ و SQL من ناحية الطريقة.
ماذا يعني ذالك ؟؟
لنعمق المثال السابق اكثر
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6 };
var nums = from r in numbers
where r < 6
select r;
foreach(int n in nums)
{
Label1.Text += n.ToString() + "<br />";
}راح نلاحظ النتيجة
1
2
3
4
5
اتضح المعنى من الكلام السابق بأن يوجد شرط where كما هو في SQL
اذا اكيد يوجد order By
لنعمل مثالنا يقوم بترتيب الارقام من الاكبر الى الاصغير او ما يسمى في
الاستعلام descending :
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6 };
var nums = from r in numbers
orderby r descending
select r;
foreach(int n in nums)
{
Label1.Text += n.ToString() + "<br />";
}راح تكون النتيجة الترتيب ابتداء من رقم 6 وصولا الى 0
ايضا توجد خواص للـ LINQ مثل Count Sum Min Max
دعنا نكتب مثال بسيط للـ Count
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6 };
var nums = (from r in numbers
select r).Count();
Label1.Text = nums.ToString();-----------------------
بعد التعرف على طريقة او شكل الاستعلام الخاص بـ LINQ في اخر جزئ من هذا المقال سوف اتحدث الى طريقة جلب البيانات وعرضها في الادوات الخاصة بعرض البيانات وعلى سبيل المثال GridView .
بصراحة طريقة مشابهة الى طريقة الـ ADO.NET .
لكن في البداية بنرجع الى نقطة ذكرتها في السطور السابقة انك تعجل الجداول كـ مكونات لغة البرمجة ,,, كيف !!
في البداية نعمل أي جدول في نريد .
انا عملت جدول اسمه employee وتوجد به الحقول التالية :
employeeID
employeeName
employeeJob
employeeEmail
وكتبت في حقولة كم موظف لتطبيق العمليات
وانت اعمل على حسب رغبتك لان هذا مثال فقط توضيحي .
الحين يوجد مجلد اسمه App_Code ضمن مجلدات موقعك واذا كان ليس موجود تستطيع اضافتة
رايت كليك على المجلد بعد اضافتة ونختار Add new item
وراح نختار بعدها اضافة LINQ to SQL classes الى المشروع.
ملاحظة:
الاسم الي راح نكتبة الى الملف ( نحفظة لان راح نستخدمة )
في مثالي انا وضعت الاسم LinqWeb
بعد اضافة الـ LINQ to SQL classes راح تفتح عندنا صحفة الـ model
ستظهر لنا صفحة مقسمة الى نصفين جزئ يمين والاخر يسار علينا فقط سحب الجدول
الى جزء اليسار وراح يظهر لنا مثل الصورة .
نرجع الى صفحة الكود ونمسح كل شي وايضا نمسح الـ label و نضع GridView
وكما اتفقنا سابقا عن طريقة الاستعلام نكتب :
using (LinqWebDataContext db = new LinqWebDataContext())
{
var AllEmp = from r in db.employees
select r;
GridView1.DataSource = AllEmp;
GridView1.DataBind();
}اختلفت قليلا طريقة الاستعلام لكن بشكل بسيط جدا لو نلاحظ بدأت بعمل متغير اسمه db من model الي عملناه الى قاعدة البيانات وانا قلت نحفظ الاسم سابقا , راح تلاحظ انا قلت اسم الـ model كان LinqWeb
وبعدها بأدت في الاستعلام طبعا بكلمة from وعرفت متغير اسمة r بس في كودنا الحالي من db.employees حيث employees اسم الجدول
ملاحظة:
تضاف s الى اسماء الجداول للتميز.
واتوقع طريقة ربط الـ grid view واضحة .
-------------------------
وحاب انبه ان الـ LINQ ليست فقط ما كتبت اعلى بل اكثر انا فقط كنت اوضح
واعطي نبذة عن ماهية وطرق الاستخدام .
في النهاية اخواني هذه اول مرة اكتب , اكيد ينقصة الكثير لكن لا بأس بالمحاولة
واتمنى اني وصلت المعلومة بالفائدة .
مصادر:
- مصدر متعلق بالخواص مع امثلة للأستخدام
