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

LINQ to Everything

مثبّت
بدأه VB Helper في 16 يوليو 2011 · 18 رد · 8,007 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

8

.:: Wish to become better and better ::.

#2

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

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

وشكرا

#3

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

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

2

.:: Wish to become better and better ::.

#4

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

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

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

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

#5

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

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

1

.:: Wish to become better and better ::.

#6

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

اليوم سنكمل مسيرتنا في الـ 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 في 16 سبتمبر 2011 في 16:56

1

.:: Wish to become better and better ::.

#7

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

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

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

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

تم تعديل هذه المشاركة بواسطة M.B.O في 17 سبتمبر 2011 في 03:34

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#8

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

Language-Integrated Query

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

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

LINQ.pdf

1

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

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

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

.:: Wish to become better and better ::.

#10

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

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

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

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

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

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

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

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

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

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

#11

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

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

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

1

.:: Wish to become better and better ::.

#12

السلام عليكم

لدي سؤال

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

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

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#13

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

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

.:: Wish to become better and better ::.

#14

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

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#15

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

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

.:: Wish to become better and better ::.

#17

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

 

تسلم اخي Max bayne ..

.:: Wish to become better and better ::.

#18

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

#19

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

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