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 بذكاء، لأنها توفر كودًا أكثر نظافة وكفاءة!

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework