آموزش IEnumerable و IQueryable در EF Core

تهران آی تی / برنامــه نویــسـی / آموزش IEnumerable و IQueryable در EF Core

آموزش IEnumerable و IQueryable در EF Core

در این آموزش قصد داریم به یکی از مباحث مهم و پایه‌ای در توسعه برنامه‌های مبتنی بر Entity Framework Core در Asp.Net Core بپردازیم. تفاوت بین IEnumerable و IQueryable. این دو رابط کاربردی به ظاهر مشابه هستند، اما تفاوت‌های اساسی‌ای در شیوه اجرا و تاثیر آن‌ها بر عملکرد برنامه دارند. در دنیای برنامه‌نویسی با EF Core، کار با دیتابیس از طریق LINQ انجام می‌شود. اما اینکه یک کوئری به صورت IEnumerable یا IQueryable باشد، تفاوت زیادی در نحوه‌ی اجرای آن، مصرف حافظه، و سرعت دارد.

اینکه یک کوئری به صورت IEnumerable یا IQueryable باشد، تفاوت زیادی در نحوه‌ی اجرای آن، مصرف حافظه، و سرعت دارد.

IEnumerable چیست؟

IEnumerable از فضای نام System.Collections.Generic است. برای پیمایش مجموعه‌هایی استفاده می‌شود که در حافظه قرار دارند. اجرای کوئری به صورت in-memory (در حافظه) انجام می‌شود. مناسب برای زمانی است که داده‌ها قبلاً از دیتابیس بارگذاری شده‌اند.

var users = context.Users.ToList(); // اجرای کوئری در همین لحظه
var filtered = users.Where(u => u.Age > 25); // فیلتر در حافظه انجام می‌شود

IQueryable چیست؟

IQueryable از فضای نام System.Linq است. نماینده‌ای از یک کوئری است که روی منبع داده‌ای قابل query شدن (مثل دیتابیس) اجرا می‌شود. اجرای کوئری به صورت deferred execution است. EF Core این کوئری را به SQL تبدیل و در سرور اجرا می‌کند.

var filtered = context.Users.Where(u => u.Age > 25); // هنوز اجرا نشده
var list = filtered.ToList(); // اجرای کوئری اینجا اتفاق می‌افتد

هدف اصلی از استفاده‌ی IQueryable و IEnumerable این است که تا حد امکان پردازش‌ها در سمت دیتابیس و از طریق IQueryable انجام شود، نه در حافظه برنامه با استفاده از IEnumerable. این رویکرد باعث بهینه‌سازی سرعت، کاهش مصرف حافظه و افزایش عملکرد کلی برنامه می‌شود.

تفاوت‌های اصلی بین IEnumerable و IQueryable

ویژگی IEnumerable IQueryable
اجرا در حافظه (Client Side) در دیتابیس (Server Side)
زمان اجرا بلافاصله بعد از ToList زمانی که نیاز باشد – deferred
ترجمه به SQL خیر بله
عملکرد کندتر در داده‌های بزرگ بهینه‌تر
مناسب برای کوئری‌های ساده و داده‌های موجود کوئری‌های پیچیده و فیلتر در دیتابیس

خطاهای رایج

بسیاری از توسعه‌دهندگان تازه‌کار در EF Core ابتدا از ToList استفاده می‌کنند، سپس با Where فیلتر می‌کنند. این یعنی تمام داده‌ها از دیتابیس بارگیری می‌شود و فیلتر در حافظه انجام می‌شود. این کار در داده‌های بزرگ منجر به کاهش شدید عملکرد می‌شود.

❌ استفاده نادرست

var users = context.Users.ToList().Where(u => u.IsActive);

✅ استفاده درست

var users = context.Users.Where(u => u.IsActive).ToList();

استفاده ترکیبی از IQueryable و IEnumerable

در برخی موارد نیاز است بخشی از کوئری در دیتابیس اجرا شود و بخشی در حافظه. استفاده از AsEnumerable باعث می‌شود بخش دوم دیگر به SQL تبدیل نشود.

var query = context.Users.Where(u => u.IsActive); // IQueryable
var users = query.AsEnumerable().Where(u => SomeCustomFunction(u)); // IEnumerable

یک مثال از استفاده ترکیبی از IQueryable و IEnumerable: فرض کنید. در یک سایت فروشگاهی، کاربران می‌تونن لیست محصولات رو بر اساس دسته‌بندی و قیمت فیلتر کنن. این فیلترها مستقیماً به دیتابیس منتقل می‌شن (یعنی IQueryable) و SQL برای انتخاب محصولات اجرا می‌شه. اما بعد از واکشی، می‌خوای قیمت نهایی هر محصول رو بر اساس یک الگوریتم پیچیده‌ی تخفیف‌دهی حساب کنی. مثلاً تخفیف براساس نوع کاربر، مناسبت روز، موجودی انبار و غیره — که این الگوریتم در C# نوشته شده و قابل ترجمه به SQL نیست.

سخن پایانی

  • از IQueryable برای کوئری‌های اصلی روی دیتابیس استفاده شود.
  • از IEnumerable زمانی استفاده شود که نیاز به پردازش در حافظه یا استفاده از توابع .NET داریم.
  • اشتباه در انتخاب می‌تواند منجر به کاهش عملکرد و مصرف زیاد حافظه شود.
جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد