CodeShot

IEnumerable در مقابل IQueryable

هر دو برای پیمایش مجموعه داده استفاده می‌شوند، اما IEnumerable عملیات را در حافظه (Memory) انجام می‌دهد، در حالی که IQueryable کوئری را به دیتابیس یا منبع داده منتقل می‌کند.

ویژگیIEnumerableIQueryable
محل اجراحافظه (Memory)دیتابیس
Deferred Executionبلهبله
مناسب EF Coreخیربله
Performance روی داده زیادضعیف‌تربهتر
قابلیت تبدیل به SQLخیربله
مناسب برایCollectionهاDatabase

کِی از IEnumerable استفاده کنیم؟

وقتی داده‌ها قبلاً در حافظه قرار دارند یا روی Collectionهای معمولی مثل List کار می‌کنید.

کِی از IQueryable استفاده کنیم؟

وقتی با Entity Framework یا LINQ to SQL کار می‌کنید و می‌خواهید فیلترها در دیتابیس اجرا شوند.

مثال IEnumerable

var users = context.Users.ToList();

var result = users.Where(x => x.Age > 18);

مثال IQueryable

var result = context.Users .Where(x => x.Age > 18);

اشتباه رایج

فراخوانی زودهنگام ToList() باعث می‌شود تمام داده‌ها از دیتابیس خوانده شوند و سپس فیلتر شوند.

جمع‌بندی

در EF Core تا زمانی که نیاز نیست از IQueryable خارج نشوید.