LINQ - Extension Methods
LINQ - Extension Methods
في LINQ، تعتمد أغلب الوظائف على Extension Methods، وهي طرق إضافية (Methods) تُضاف إلى IEnumerable و IQueryable دون الحاجة إلى تعديل الكود الأصلي للكائنات. هذه الطرق توفر طريقة مرنة وسهلة للاستعلام عن البيانات وتنفيذ العمليات المختلفة عليها.
1. ما هي Extension Methods في LINQ؟
🔹 الموقع: توجد في System.Linq
🔹 تُضاف إلى: IEnumerable<T>
و IQueryable<T>
🔹 الهدف: توسيع الوظائف المتاحة للكائنات دون تعديل الشيفرة المصدرية
🔹 الاستخدام الرئيسي: كتابة استعلامات LINQ باستخدام Method Syntax
مثال على Extension Method
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// استخدام LINQ Extension Method
var evenNumbers = numbers.Where(n => n % 2 == 0);
Console.WriteLine("الأرقام الزوجية:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
كيف يعمل؟
Where(n => n % 2 == 0)
هو Extension Method يقوم بتصفية القائمة.- يستخدم Lambda Expressions لتحديد الشرط.
- يعمل على
IEnumerable<T>
مباشرة دون الحاجة إلى كود إضافي.
2. أهم LINQ Extension Methods
أ. طرق التصفية (Filtering Methods)
var evenNumbers = numbers.Where(n => n % 2 == 0);
var stringValues = mixedList.OfType<string>();
ب. طرق الإسقاط (Projection Methods)
var squares = numbers.Select(n => n * n);
var words = sentences.SelectMany(s => s.Split(' '));
ج. طرق الفرز (Sorting Methods)
var sortedNumbers = numbers.OrderBy(n => n);
var sortedNumbers = numbers.OrderByDescending(n => n);
var sortedEmployees = employees.OrderBy(e => e.Department).ThenBy(e => e.Name);
د. طرق التجميع (Grouping Methods)
var groupedByAge = people.GroupBy(p => p.Age);
هـ. طرق التجميع الحسابي (Aggregation Methods)
var totalSum = numbers.Sum();
var average = numbers.Average();
var count = numbers.Count();
var maxNumber = numbers.Max();
و. طرق التحقق (Quantifier Methods)
bool hasEven = numbers.Any(n => n % 2 == 0);
bool allPositive = numbers.All(n => n > 0);
bool exists = numbers.Contains(5);
ز. طرق التعامل مع المجموعات (Set Methods)
var uniqueNumbers = numbers.Distinct();
var combinedList = list1.Union(list2);
var commonElements = list1.Intersect(list2);
var difference = list1.Except(list2);
ح. طرق الحصول على العناصر (Element Methods)
var firstEven = numbers.First(n => n % 2 == 0);
var lastEven = numbers.Last(n => n % 2 == 0);
var thirdElement = numbers.ElementAt(2);
var singleElement = numbers.Single(n => n == 5);
ط. طرق التحويل (Conversion Methods)
List<int> numList = numbers.ToList();
Dictionary<int, string> dict = people.ToDictionary(p => p.Id, p => p.Name);
var intList = mixedList.Cast<int>();
3. إنشاء Extension Method مخصصة
using System;
using System.Collections.Generic;
using System.Linq;
public static class Extensions
{
public static IEnumerable<int> GetEvenNumbers(this IEnumerable<int> source)
{
return source.Where(n => n % 2 == 0);
}
}
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.GetEvenNumbers();
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
4. الخلاصة
- LINQ Extension Methods هي طرق توفر وظائف إضافية لـ IEnumerable و IQueryable.
- تسهل كتابة استعلامات البيانات وتحسن أداء التطبيق.
- يمكن استخدامها لإنشاء فلترة، فرز، تجميع، حسابات، تحويلات وغيرها.
- يمكن للمطورين إنشاء طرق مخصصة بسهولة لتوسيع وظائف LINQ.
🎯 نصيحة: تعلم واستخدم LINQ Extension Methods بذكاء، لأنها توفر كودًا أكثر نظافة وكفاءة!
تعليقات
إرسال تعليق