IEnumerable در مقابل IQueryable
هر دو برای پیمایش مجموعه داده استفاده میشوند، اما IEnumerable عملیات را در حافظه (Memory) انجام میدهد، در حالی که IQueryable کوئری را به دیتابیس یا منبع داده منتقل میکند.
| ویژگی | IEnumerable | IQueryable |
|---|---|---|
| محل اجرا | حافظه (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 خارج نشوید.
