LINQ to Everything

11 فبراير 2016     232 مشاهدة    1 تعليق
تم النشر في #LINQ 

أريد أن أقدم لكم اليوم درس متنوع في تقنية الـ LINQ. هذا الدرس ما هو إلا استعراض وتطبيق إمكانيات الإستعلام بواسطة هذه التقنية للوصول إلى الحلم LINQ to Everything.

طبعا سأفترض أن الشخص القارىء قد تعرف مسبقاً ولو الشيء اليسير عن هذه التقنية, لأنني لست في صدد شرح هذه التقنية في هذه المقالة.

من المعروف لدينا وبعد ظهور الإصدار 3.0 أنه تضمن واحدة من أعظم التقنيات في مجال التعامل مع البيانات والإستعلام فيها, وكما نعلم أن الدوت نت في ذاك الإصدار وفر 3 أنواع أساسية من البيانات للإستعلام فيها سأحاول استعراض مثال لكل واحد منها, ومن ثم سنسعى للوصول إلى حلمنا المنشود.

1- LINQ to Objects

هذا النوع يقوم بالإستعلام في الكائنات سوى كانت معرفة من أصل اللغة أو من قبل المبرمج.

سنقوم بكتابة مثال للإستعلام في مصفوفة نصية للبحث عن الأسماء التي تبدأ بحرف الـ J

Dim names() As String = {"Peter", "Dave", "John", "Joseph", "Samantha"}
Dim query = From name In names
Where name.StartsWith("J")
Select name

For Each item In query
Console.WriteLine(item)
Next

أما في المثال التالي سوف نقوم بعرض أرقام وأسماء العمليات الجارية في نظام التشغيل والتي تحتوي أكثر من أربعة Threads

Dim query = From process In process.GetProcesses()
Where process.Threads.Count > 4
Select process.Id, process.ProcessName

For Each item In query
Console.WriteLine("{0}: {1}", item.Id, item.ProcessName)
Next

2- LINQ to ADO.NET

هذا النوع يقوم بالإستعلام في تقنية الـ ADO.NET وله 3 أنواع:

- LINQ to DataSet

هذا النوع يقوم بالإستعلام في الكائن DataSet.

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

Dim adpt As New CategoriesTableAdapter()
Dim ds As New NorthwindDataSet()
adpt.Fill(ds.Categories)
Dim query = From category In ds.Categories
Order By category.CategoryID Descending
Select category.CategoryName

For Each item In query
Console.WriteLine(item)
Next

- LINQ to SQL

هذا النوع يقوم بالإستعلام في قواعد البيانات العلائقية التي تستخدم لغة الاستعلام SQL.

وفي المثال التالي تم الاستعلام عن عدد الطلبيات التي تاريخ طلبها أكبر من 3/2/1997

Dim db As New NorthwindDataContext()
Dim query = (From order In db.Orders
Where order.OrderDate > New DateTime(1997, 2, 3)
Select order).Count

Console.WriteLine(query)

- LINQ to Entities

هذا النوع يقوم بالإستعلام في الـ Entity Framework والتي ظهرت رسميا في الاصدار الرابع للدوت نت.

وفي المثال التالي سنقوم بجلب أول ثلاثة سجلات من جدول المنتجات.

Dim db As New NorthwindEntities()
Dim query = (From product In db.Products
Select product).Take(3)

For Each item In query
Console.WriteLine("{0}: {1} ({2})", item.Category.CategoryName, item.ProductName, item.UnitPrice)
Next

3- LINQ to XML

هذا النوع يقوم بالإستعلام في ملفات أو كائنات الـ XML.

وفي المثال التالي تم الاستعلام عن العميل صاحب الرقم 3.

Dim doc As XDocument = XDocument.Load("Customers.xml")
Dim query = (From customer In doc...<customer>
Where customer.@ID = 3
Select customer).Single

Console.WriteLine("{0}: {1}", query.@ID, query.<name>.Value)

طبعاً هذه أنواع مصادر البيانات الأساسية لتقنية الـ LINQ والتي أتت مع بيئة الدوت نت, لكنها ليست الوحيدة لذا سنتطرق الآن لمصادر قد تبدو غريبه, لكن جنوني وهوسي في هذه التقنية لا حد له laugh

4- LINQ to Regular Expressions

هذا النوع يقوم بالإستعلام في النصوص عبر الـ Regular Expressions.

وفي المثال التالي استخدمنا العبارة "B." لجلب الكلمات المكونة من حرفين وتنتهي بالحرف B.

Dim query = "VB Is Cool".Where(Function(x) New Regex(".B")).Select(Function(x) x)
<Extension()> _
Function Where(s As String, f As Func(Of Object, Regex)) As IEnumerable(Of String)
Dim list As New List(Of String)
For Each m As Match In f(Nothing).Matches(s)
list.Add(m.Value)
Next
Return list
End Function

5- LINQ to Reflection

هذا النوع يستخدم مفهوم الـ Reflection أو البرمجة الإنعكاسية للحصول على معلومات عن الكائنات Metadata مثل معلومات أنواع البيانات والخواص والأحداث والدوال .. إلخ.

وفي المثال التالي سنقوم بعرض أسامي دوال الفئة String وعدد الـ Overloads الخاص بتلك الدوال.

Dim query = From method In Type.GetType("System.String").GetMethods()
Where Not method.IsStatic
Order By method.Name
Group method By method.Name Into Group

For Each item In query
Console.WriteLine("{0} ({1})", item.Name, item.Group.Count)
Next

ومثل ما ذكرت سابقاً هوس الـ LINQ لا ينتهي فيمكن عمل العديد من مزودات البيانات التي قد تخطر أو لا تخطر على البال مثل:

  • LINQ to Twitter
  • LINQ to Amazon
  • LINQ to Facebook
  • LINQ to YouTube
  • LINQ to LDAP

أو أي مصدر معلومات قد يخطر في بالك, وقد ذكرت في مقال سابق قبل سنوات عدة عن كيفية عمل المزود LINQ to RSS والذي يمكنك من الإستعلام في خلاصة الأخبار, والشفرة المصدرية موجودة على هذا الرابط.

تويتر فيسبوك قوقل + لينكد إن


1 تعليق

Agonnalislal (23/08/2017 08:28:45 ص)

The ED as a result of that surgery could be either temporary or permanent. Core maca from your supplier energetix can be an herb that tests quite well for several males.


اكتب تعليقك