الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

What is LINQ?

بدأه D a r K T o u c h في 6 أكتوبر 2010 · 12 رد · 3,789 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ستظهر لنا صفحة مقسمة الى نصفين جزئ يمين والاخر يسار علينا فقط سحب الجدول

الى جزء اليسار وراح يظهر لنا مثل الصورة .

post-224629-026932400 1286375246_thumb.j

نرجع الى صفحة الكود ونمسح كل شي وايضا نمسح الـ 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 ليست فقط ما كتبت اعلى بل اكثر انا فقط كنت اوضح

واعطي نبذة عن ماهية وطرق الاستخدام .

في النهاية اخواني هذه اول مرة اكتب , اكيد ينقصة الكثير لكن لا بأس بالمحاولة

واتمنى اني وصلت المعلومة بالفائدة .

مصادر:

- مصدر متعلق بالخواص مع امثلة للأستخدام

101 LINQ Samples

المرفقات
Pic1.JPG
1

My Latest

Hello Entity Framework Code First

--------------------

#2

مقالة جميلة ولكن حبذا لو كانت اطول :)

ولكن اتوقع انه تم بعض الايضاح

---مصدر سريع للقراءة عفوا للمشاهدة :D

http://www.asp.net/web-forms/data

How Do I with LINQ

للتوسع كثيرا

Pro LINQ Language Integrated Query in C# 2008 /2010

جزاك الله كل خير

In bad state

#3
X-File كتب:

مقالة جميلة ولكن حبذا لو كانت اطول :)

ولكن اتوقع انه تم بعض الايضاح

---مصدر سريع للقراءة عفوا للمشاهدة :D

http://www.asp.net/web-forms/data

How Do I with LINQ

للتوسع كثيرا

Pro LINQ Language Integrated Query in C# 2008 /2010

جزاك الله كل خير

شكرا لك اخي X-File

الحمد لله اول كتابة لي نجحت ولكن تحتاج بعض التعديلات في المرات القادمة

وبالنسبة لطول المقال حبت اكتب من فهمي كيف بدأت اقراء عن الـ LINQ

وفي نفس الوقت حبيتها تكون كدخول او تهيئة اذا حاولت اني اكتب اشياء متعلقة عن الـ LINQ

وشكرا لك اخي على المصادر لانها ممتازة .

1

My Latest

Hello Entity Framework Code First

--------------------

#4

شكرا الك اخي D a r K T o u c h

استمر هيك محتاجين دعم باللنك :blush: :blush:

#5

يعطيك العافية حاجة جميلة بجد

اللي يبي مشروع تخرج asp.net

يرسل لي رسالة خاصة

#6

يعطيك العافيه اخوي

صراحه من زمان اسمع عن ذي التقنيه لكن لا اعرف ماهي وماذا تعني الان فهمت ماذا تعني لكن لم استطيع التطبيق

حاولت اطبقها لكن لم تفلح محاولتي مع اني طبقت نفس شرحك بنسبه 99 بالميه لكن مادري ماهو الخطاء

ياليت اخووي ااذا عندك مثال تطبيقي جاهز ياليت ترفعه لنا .. واكون من الشاكرين لك انا ابغى اتعلم هذي التقنية في اي شكل

#7

السلام عليكم

linqsample.rar

linqsample.rar

In bad state

#8

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

اشكركم اخواني ..

والحمد لله نالت اعجابكم .

وشكرا لك اخي X-File لانك سبقتني

اخي lak3yoni تستطيع تحميل المرفقات التي وضعها اخوي X-File واكيد راح تفهم

شكرا لكم جميعا

My Latest

Hello Entity Framework Code First

--------------------

#9

ايوووه الحين اتضحك الفكرة

شكرا لك اخوي اكس فيل

وشكرا لك اخوي D a r K T o u c h

#10

اخوي العزيز شكرا على الدرس الجميل

لكن عندي استفسارين ياليت انت والا

الاخوان يجاوبوني فيها هل في الlinq

نحتاج الي ان نعرف نص الاتصال ثم نفتحه والالاداعي لذلك

ثانيا هل الlinq تغنينا عن الوضع المتصل والمنفصل مثل

datareader وdataadapterوغيرها

اتمنى الرد وشكرا

#11
اقتباس
اخوي العزيز شكرا على الدرس الجميل

لكن عندي استفسارين ياليت انت والا

الاخوان يجاوبوني فيها هل في الlinq

نحتاج الي ان نعرف نص الاتصال ثم نفتحه والالاداعي لذلك

ثانيا هل الlinq تغنينا عن الوضع المتصل والمنفصل مثل

datareader وdataadapterوغيرها

اتمنى الرد وشكرا

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

بصراحة انا خبرتي في الـ ADO.NET بسيطة جدا

اقتباس
نحتاج الي ان نعرف نص الاتصال ثم نفتحه والالاداعي لذلك

نحن بعد اضافة LINQ to SQL classes ووضع الجداول التي نريد التعامل معها سوف نكون بأتصال مع الجداول من خلال تعريف DataContext لها

بمعنى اخر الـ DataContext سوف تحل محل نص الاتصال لان هي بالاساس سوف تحتوي على نص الاتصال وللتأكد لنقم بفتح الـ dbml الذي تم انشاءة في الدرس ويحمل اسم LinqWeb

ونذهب الى الخصائص Properties سنلاحظ احد الخيارات connection ويوجد الى جانبة علامة + لنفتحها وسنلاحظ وجود الـ connection string

وفي المثال انا وصعت طريقة استرجاع البيانات من الجدول

        using (LinqWebDataContext db = new LinqWebDataContext())
        {
            var AllEmp = from r in db.employees
                         select r;
            GridView1.DataSource = AllEmp;
            GridView1.DataBind();
       }

لو نلاحظ عرفت DataContext واعطيتة اسم db واستطعت الوصول الى جدول الـ employee بشكل مباشر

اقتباس
ثانيا هل الlinq تغنينا عن الوضع المتصل والمنفصل مثل

datareader وdataadapterوغيرها

في اعتقادي الشخصي نستطيع لان كما ذكرت في اول الموضوع توجد انواع الى الـ 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}

حيث انا تعاملت مع النوع الاول .

وان شاء الله توجد اجابات اخرى تدعم او تصحح اذا وجدت اخطاء لدي

good luck

My Latest

Hello Entity Framework Code First

--------------------

#12

ما هي data adapter ?

الله أكبر الله أكبر الله أكبر لآ إله إلا الله الله أكبر الله أكبر ولله الحمد

#13

انا راح اجاوب عن الاخ مدام اني

اللي طرحت المعلومة

في الado.net هناك وضعين للتعامل

مع قاعدة البيانات المتصل والمنفصل

في الوضع المتصل يكون التعامل

مع قواعد البيانات عن طريق dataset

حيث اننا نقوم باسترجاع البيانات التي نريد

ونضعها بالdataset وبعد ذلك نجري العملية التي

نريدها الوسيط الذي يتم نقل المعلومات من الداتا بيز

الى الdataset هي الdataadapter

بااختصار هي وسيط لنقل البيانات من الداتا بيز الى dataset

مواضيع مشابهة