ماهي لغة الاستعلام التكاملية LINQ في #C ؟
تقنية LINQ
اختصار لكلمة(Language Integrated Query)
هي عبارة عن مكتبه على منصة Dot.NET لتسهيل الوصول إلى البيانات من مخازن بيانات مختلفة in-memory objects, databases, XML documents
و بلغة استعلام موحدة وسهله تستخدم في عدة تطبيقات مختلفه على نفس المنصه.
تتميز بأنها سهلة الكتابة والاكمال التلقائي وايضاً تساعد على تفادي الأخطاء الشائعة في لغات الاستعلام الآخر .
يتم التعامل معها من بيئة Visual Studio بلغة #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 ؟
لفهم سبب وجوب استخدام 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
من هنا how to use linq with sql
تعليقات
إرسال تعليق