• 0
VB Helper

LINQ to Everything

سؤال

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

أخوتي وأخواتي أعضاء هذا المنتدى الرائع أريد أن أقدم لكم اليوم درس متنوع في تقنية الـ 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

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

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

For Each item In query
Console.WriteLine(String.Format("{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(String.Format("{0}: {1} ({2})", item.Category.CategoryName, item.ProductName, item.UnitPrice))
Next

4- 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(String.Format("{0}: {1}", query.@ID, query.<name>.Value))

5- LINQ to Reflection

للكائنات Meta Data للحصول على الـ Reflection وهذا النوع يقوم بإستخدام مفهوم الـ

Static لكل دالة بشرط أن تكون من النوع Overloads وعدد الـ String وفي المثال التالي سيتم عرض أسامي دوال الفئة


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(String.Format("{0} ({1})", item.Name, item.Group.Count))
Next

</name></customer>

.. نكتفي اليوم بهذا القدر, وسنكمل المشوار في يوم آخر وسنتطرق لأنواع اخرى يمكن الاستعلام فيها

تم تعديل بواسطه VB Helper
7

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

18 إجابة على هذا السؤال .

  • 0

جزاك الله خيرا أخى الكريم

بالنسبة للتعامل مع البيانات أيهما أفضل ADO.net أم Linq

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اخي للتعامل مع البيانات في الـ ADO.NET 3.5 يفضل إستخدام تقنية الـ LINQ!!

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا أخى الكريم

حقيقة أنا لا أعلم شىء عن Linq وكنت قد حملت AppDev.LINQ.Using.Visual.Basic.2008.DVD

ولكن نوعا ما بسبب سرعة تحدثهم بالإنجليزية فلم أستوعب منهم الدروس فقررت عدم ترك ADO.net

هل ممكن المساعدة فى كتاب جيد يتحدث عن تعلمها ويغطى معظم جوانبها وأكون لك من الشاكرين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اخي كما ذكرت سابقا تقنية الـ LINQ والـ EntityFramework هما الاسلوبين المستخدمان في الـ ADO.NET 3.5, اما بخصوص كتب هذه التقنية فعديدة في الانترنت, وانا لا اتطرق هنا في الحديث عن هذه التقنية وقد اشرت لهذا سابقا في الموضوع, اما اذا اردت اي استفسار فيها فيمكنك كتابة موضوع مستقل .. بالتوفيق ..

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اليوم سنكمل مسيرتنا في الـ LINQ to Everything

6- LINQ to Regular Expressions

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

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


Dim query = "VB Helper".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

تم تعديل بواسطه VB Helper
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عجيب انا كنت اتوقع ان LINQ متعلقة فقط بقواعد البيانات

لكن طلع فيها اشياء حلوة ذكرتني ب SimpleXML في لغة PHP نفس الفكرة لكن هذه فقط على ملفات XML

عندي سؤال ولو انه فيه غباوة شوية ، هل LINQ مدرجة ضمن الفيجول ستديو 2010

ولا لازم اقوم بتثبيت بعض الاضافات حتى اعمل عليها

تم تعديل بواسطه M.B.O
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرفق كتاب عن دورة LINQ

Language-Integrated Query

الشرح باللغة العربية

بقلم: محمد سامر أبو سلو

LINQ.pdf

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اخي تفضل بالسؤال في أي وقت, طبعا سؤالك ذكرني بأيامي الاولى مع هذه التقنية عندما كنت استخدم الدوت نت 2.0 كانت هناك اضافة لتحميل هذه التقنية ولكن كانت Beta على ما اعتقد ولكن تم الحاقها ضمن الدوت نت 3.5, ويمكنك استخدامها من هذا الاصدار فما فوق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

جزاك الله خيرا على هذا الشرح الواضح

سؤال ربما غريب قليلاً

لماذا جعلت هذه التقنية تستخدم الاستعلام بعكس الطرق المعتادة في ترتيب الاستعلام

فمثلاً استعلام sql

نبدأ ب select ثم from ثم where ثم order

وهي مشهورة وأقرب للذهن

فما سر جعل استعلام هذه التقنية بالمقلوب، وهل يمكن استخدام الطريقة (اللي فوق) مع ال LINQ

وجزاكم الله خيراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

شكرا اخي محمد على الكتاب

اخي sscvbnm يكتب الاستعلام بتقنية الـ LINQ بعكس المعتاد عليه للـ IntelliSense علشان نعرف مصدر البيانات اولا من ثم نختار الخصائص والطرق الموجوده فيه, وعلى فكرة كانت هذه التقنية وخصوصا بلغة الفيجوال بيسك بنفس الترتيب في لغة الاستعلام SQL ولكن لتوحيد المبدأ في لغات الدوت نت أتت لنا بعكس الترتيب

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

لدي سؤال

وهو هل استطيع ان اصمم قاعدة بيانات ن خلال DataSet واقوم بربط العلاقات بين الجداول من خلالها وبعد عند الحفظ من خلال تقنية LinqToSQl هل استطيع حفظ هذه البيانات كا XML .

وهل الافضل هو ان اسنخدم قاعدة بيانات SQL او ملف XML ارجو ان يكون سؤالي واضح

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اخي افضل ان تعمل ملف البيانات كـ XML ومن ثم يمكنك استخدام الـ XLINQ للقيام بالعمليات عليه, كما يمكنك تحميل الى DataSet من خلال الامر ReadXML

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل تخزين البيانات في ملف افضل ام sql server

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اخي هذا يعتمد على حجم البيانات المخزنه ونوعها فعلى سبيل المثال لو اريد ان احفظ اعدادات برنامج ما كلون الخلفيه, طول الفورم وعرضه ... الخ فأعتقد ان حفظها في ملف افضل لأن البيانات ليست كثيره وهيكلتها غير معقده واضف الى ذلك ان البيانات غير حساسه. ولايعني ذلك ان ملف الـ XML لايستوعب بيانات كثيره ولايمكن حفظها بطريقة امنه, بل يمكنك ولكن يحتاج الى جهد ذاتي ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

تسلم اخي Max bayne ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكورررررررررررررررررررررررررررر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .