ماهي لغة الاستعلام التكاملية LINQ في #C ؟




تقنية  LINQ 
اختصار لكلمة(Language Integrated Query)
هي عبارة عن مكتبه على منصة Dot.NET لتسهيل الوصول إلى البيانات من مخازن بيانات مختلفة in-memory objects, databases, XML documents
و بلغة استعلام موحدة وسهله تستخدم في عدة تطبيقات مختلفه على نفس المنصه.

تتميز بأنها سهلة الكتابة والاكمال التلقائي وايضاً تساعد على تفادي الأخطاء الشائعة في لغات الاستعلام الآخر .
يتم التعامل معها من بيئة Visual Studio بلغة #C لسترجاع وتخزين وتعديل البيانات .




مثال #C


using System;
using System.Linq;
class Program
{
 static void Main()
 {
 string[] words = {"Book", "pen", "LINQ", "cat", "world"};

 //Get only short words
 var myLinqQuery = from word in words
                   where word.Length <= 5 
                   select word;
 

 //Print each word out
 foreach (var word in myLinqQuery )
 {
 Console.WriteLine(word);
 } 
Console.ReadLine(); 
         }
  }

لن تحصل على نتيجة استعلام LINQ حتى يتم تنفيذه. يمكن تنفيذ استعلام LINQ بعدة طرق ، وهنا استخدمنا حلقة foreach لتنفيذ استعلامنا المخزن في myLinqQuery. تنفذ حلقة foreach الاستعلام على مصدر البيانات وتحصل على النتيجة ثم تتكرر على مجموعة النتائج.
وبالتالي ، يجب على كل استعلام LINQ الاستعلام عن نوع من مصادر البيانات ما إذا كان يمكن أن يكون مصفوفه  أو  ملف XML أو قواعد بيانات أخرى. بعد كتابة استعلام LINQ ، يجب تنفيذه للحصول على النتيجة.


لماذا LINQ  ؟

لفهم سبب وجوب استخدام LINQ ، دعونا نلقي نظرة على بعض الأمثلة. افترض أنك تريد العثور على قائمة بالطلاب المراهقين من مجموعة من كائنات الطلاب.

قبل الإصدار C # 2.0 ، كان علينا استخدام حلقة "foreach" أو "for" لاجتياز المجموعة للعثور على كائن معين. على سبيل المثال ، اضطررنا إلى كتابة التعليمات البرمجية التالية للعثور على جميع كائنات الطالب من مجموعة من الطلاب حيث تتراوح أعمارهم بين 12 و 20 (للمراهقين من 13 إلى 19):


class Student
{
    public int StudentID { get; set; }
    public String StudentName { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18 },
            new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 },
            new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 },
            new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 },
            new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 },
            new Student() { StudentID = 6, StudentName = "Chris",  Age = 17 },
            new Student() { StudentID = 7, StudentName = "Rob",Age = 19  },
        };

        Student[] students = new Student[10];

        int i = 0;

        foreach (Student std in studentArray)
        {
            if (std.Age > 12 && std.Age < 20)
            {
                students[i] = std;
                i++;
            }
        }
    }
}
 delegate استخدتم الحلقات بشكل مكثف يكون مرهق للبرنامج لذالك في المثال التالي نستخدم المفوض  

delegate bool FindStudent(Student std);

class StudentExtension
{ 
    public static Student[] where(Student[] stdArray, FindStudent del)
    {
        int i=0;
        Student[] result = new Student[10];
        foreach (Student std in stdArray)
            if (del(std))
            {
                result[i] = std;
                i++;
            }

        return result;
    }
}
    
class Program
{
    static void Main(string[] args)
    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
            new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 } ,
            new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
            new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
            new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 } ,
            new Student() { StudentID = 6, StudentName = "Chris",  Age = 17 } ,
            new Student() { StudentID = 7, StudentName = "Rob",Age = 19  } ,
        };

        Student[] students = StudentExtension.where(studentArray, delegate(Student std){
                return std.Age > 12 && std.Age < 20;
            });
        }
    }
}
لذلك ، مع C # 2.0 ، حصلت على ميزة المفوض في العثور على الطلاب بأي معايير. ليس عليك استخدام حلقة for للعثور على الطلاب باستخدام معايير مختلفة. على سبيل المثال ، يمكنك استخدام نفس وظيفة المفوض للعثور على طالب له StudentId هو 5 أو اسمه Bill ، على النحو التالي:
class Program
{
    static void Main(string[] args)
    {
        Student[] studentArray = { 
                    new Student() { StudentID = 1, StudentName = "John", age = 18 } ,
                    new Student() { StudentID = 2, StudentName = "Steve",  age = 21 } ,
                    new Student() { StudentID = 3, StudentName = "Bill",  age = 25 } ,
                    new Student() { StudentID = 4, StudentName = "Ram" , age = 20 } ,
                    new Student() { StudentID = 5, StudentName = "Ron" , age = 31 } ,
                    new Student() { StudentID = 6, StudentName = "Chris",  age = 17 } ,
                    new Student() { StudentID = 7, StudentName = "Rob",age = 19  } ,
                };

        // Use LINQ to find teenager students
        Student[] teenAgerStudents = studentArray.Where(s => s.age > 12 && s.age < 20).ToArray();
       
        // Use LINQ to find first student whose name is Bill 
        Student bill = studentArray.Where(s => s.StudentName == "Bill").FirstOrDefault();
        
        // Use LINQ to find student whose StudentID is 5
        Student student5 = studentArray.Where(s => s.StudentID == 5).FirstOrDefault();
    }
}
مميزات LINQ :
  • لغة مألوفة : لا يتعين على المطورين تعلم لغة استعلام جديدة لكل نوع من أنواع مصادر البيانات أو تنسيق البيانات.
  • أقل ترميز: فهو يقلل من كمية التعليمات البرمجية المراد كتابتها بالمقارنة مع نهج أكثر تقليدية.
  • كود قابل للقراءة: يجعل LINQ الشفرة أكثر قابلية للقراءة حتى يتمكن المطورين الآخرون من فهمها وصيانتها بسهولة.
  • طريقة قياسية للاستعلام عن مصادر بيانات متعددة: يمكن استخدام نفس بناء جملة LINQ للاستعلام عن مصادر بيانات متعددة.
  • ترجمة أمانه وقت الاستعلامات: يوفر التحقق من نوع الكائنات في وقت الترجمة.
  • دعم الاكمال الذكي: يوفر LINQ الكمال التلقائي الذكي للمجموعات العامة من الكلمات المفتاحية .
  • تشكيل البيانات: يمكنك استرداد البيانات في أشكال مختلفة.

لتعرف على المزيد حول كيفية الستخدام مع  SQL
من هنا how to use linq with sql

تعليقات

المشاركات الشائعة