LINQ - Differences between IEnumerable and IQueryable
الفرق بين IEnumerable و IQueryable في C#
في C# LINQ، هناك نوعان رئيسيان من الواجهات المستخدمة للاستعلام عن البيانات:
- IEnumerable
- IQueryable
يُعد فهم الفرق بينهما أمرًا أساسيًا لتحسين أداء التطبيقات، خاصة عند التعامل مع قواعد البيانات و مجموعات البيانات الكبيرة.
1. ما هي IEnumerable?
🔹 المساحة: System.Collections.Generic
🔹 مكان التنفيذ: في الذاكرة (In-Memory)
🔹 التنفيذ: فوري (Immediate Execution)
🔹 مصدر البيانات: مثل List و Array
🔹 الأداء: أقل كفاءة مع البيانات الكبيرة
مثال:
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 };
IEnumerable<int> evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
كيف يعمل؟
- يتم تحميل البيانات كاملة ثم تصفيتها في الذاكرة.
- لا يتم توليد SQL.
2. ما هي IQueryable?
🔹 المساحة: System.Linq
🔹 مكان التنفيذ: في قاعدة البيانات
🔹 التنفيذ: مؤجل (Deferred Execution)
🔹 مصدر البيانات: EF أو LINQ to SQL
🔹 الأداء: أعلى مع البيانات الكبيرة
مثال:
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
class Program
{
static void Main()
{
using (var context = new MyDbContext())
{
IQueryable<Employee> employees = context.Employees.Where(emp => emp.Salary > 5000);
foreach (var emp in employees)
{
Console.WriteLine(emp.Name);
}
}
}
}
كيف يعمل؟
- يتم توليد استعلام SQL وتطبيق الفلترة في قاعدة البيانات.
- فقط البيانات المطلوبة يتم تحميلها.
3. مقارنة بينهما:
- IEnumerable: للبيانات الصغيرة داخل الذاكرة
- IQueryable: لاستعلامات قواعد البيانات
4. مثال عملي يوضح الفرق:
استخدام IEnumerable (تحميل كامل البيانات):
List<Employee> employees = context.Employees.ToList();
IEnumerable<Employee> filteredEmployees = employees.Where(emp => emp.Salary > 5000);
استخدام IQueryable (تنفيذ الاستعلام في قاعدة البيانات):
IQueryable<Employee> filteredEmployees = context.Employees.Where(emp => emp.Salary > 5000);
5. خلاصة
IEnumerable
: ينفذ الاستعلام داخل التطبيق.IQueryable
: ينفذ الاستعلام داخل قاعدة البيانات.
🎯 نصيحة: استخدم IQueryable
لتحسين الأداء عند التعامل مع قواعد البيانات.
تعليقات
إرسال تعليق