LINQ - Deferred Execution


LINQ - Deferred Execution

Deferred Execution في LINQ هو تأجيل تنفيذ الاستعلام حتى يتم استدعاؤه فعليًا، وليس عند تعريفه.

كيف يعمل؟
عندما تكتب استعلام LINQ، فإنه لا يتم تنفيذه فورًا، بل يتم تحويله إلى كائن يمكن تشغيله لاحقًا عند الحاجة إلى البيانات. يتم تنفيذ الاستعلام فقط عند محاولة الوصول إلى العناصر، مثل:
استخدام حلقة foreach
استدعاء ToList(), ToArray(), Count(), أو أي دالة تنفذ الاستعلام بالفعل

مثال على Deferred Execution

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// تعريف الاستعلام (لم يتم تنفيذه بعد)
var query = numbers.Where(n => n > 2);
// تنفيذ الاستعلام عند المرور عليه
foreach (var num in query)
{
    Console.WriteLine(num);
}
  
هنا، يتم تنفيذ query عند تشغيل حلقة foreach وليس عند تعريفه.


متى يحدث Immediate Execution؟
إذا استخدمت دالة مثل ToList(), ToArray(), Count()، فسيتم تنفيذ الاستعلام فورًا:
var result = numbers.Where(n => n > 2).ToList(); // يتم التنفيذ مباشرةً
في هذه الحالة، سيتم جلب البيانات فورًا إلى القائمة result.

فوائد Deferred Execution
تحسين الأداء: يتم تنفيذ الاستعلام فقط عند الحاجة إلى البيانات.
توفير الموارد: لا يتم تحميل البيانات غير المستخدمة.
المرونة: يمكن تعديل البيانات قبل التنفيذ الفعلي للاستعلام.
لكن كن حذرًا، لأن أي تغيير في المصدر (numbers في المثال) قبل التنفيذ سيؤثر على النتيجة.


تعليقات

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

C# - Arrays

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

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