فرق بین IEnumerable و IQueryable در دستورات انتیتی فریم ورک چیست ؟
دوستان فرق بین IEnumerable و IQueryable در دستورات انتیتی فریم ورک چیست ؟
موقعی که میخوایم یه سری رکورد رو از دیتابیس واکشی کنیم چه فرقی می کنه که از کدوم یکی از این ها استفاده کنیم ؟
پاسخ هوش مصنوعی
در Entity Framework، IEnumerable
و IQueryable
دو اینترفیس هستند که برای کار با مجموعه های داده استفاده می شوند، اما تفاوت های مهمی بین آن ها وجود دارد:
IEnumerable:
- این اینترفیس عموماً برای کار با مجموعه های داده ای که در حافظه (Memory) بارگذاری شده اند، استفاده می شود.
- کلیه پردازش ها در سمت کلاینت (Client-side) انجام می شود، به این معنی که تمام داده ها ابتدا از دیتابیس واکشی می شوند و سپس فیلتر یا پردازش می شوند.
- به دلیل بارگذاری تمام داده ها به حافظه، کارایی کمتری در مقایسه با
IQueryable
در برخی موارد دارد.
IQueryable:
- این اینترفیس برای کار با داده های حاصل از یک منبع داده ای (مثل دیتابیس) طراحی شده است و به شما اجازه می دهد تا شرایط پرس و جو (Query) را قبل از بارگذاری داده ها تعیین کنید.
- پرس و جوها به صورت Lazy Loading عمل می کنند و می توانند به Sql بهینه سازی شوند، که نتیجه آن کارایی بالاتر است.
- این امکان را فراهم می کند که برای اجرای تنها بخشی از داده ها، فقط نتایج مورد نیاز را از دیتابیس واکشی کنید.
در نتیجه، اگر نیاز به فیلتر کردن و پردازش های اضافی دارید که ممکن است بر روی مجموعه های بزرگ داده انجام شوند، معمولاً بهتر است از IQueryable
استفاده کنید. در صورتی که همه داده ها را دریافت کرده اید و فقط نیاز به پردازش در سطح کلاینت دارید، IEnumerable
کافی است.
تفاوت بین IEnumerable و IQueryable
شما در خوندن اطلاعات از دیتابیس از هر دو مورد می تونید استفاده کنید اما تفاوت هایی دارن که در ادامه بهشون اشاره می کنم :
- وقتی در انتیتی فریم ورک از دستور IQueryable استفاده می کنید، کوئری شما این قابلیت رو داره که دستورات رو به دستورات Sql تبدیل کنه و اطلاعات رو به سمت سرور ارسال کنه و در دیتابیس اجرا کنه در حالی که در IEnumerable دستورات در دیتابیس اجرا نمیشن.
- وقتی از دستور IEnumerable استفاده می کنید همه ردیف هایی که از دیتابیس واکشی میشن ابتدا در حافظه سرور به عنوان یک Object قرار می گیرن.
- در هر دو مورد اگر شما دستورات ToList یا ToArray رو اجرا نکنید، نتیجه کوئری در هر بار فراخوانی مجدد اجرا میشه . مثلا فرض کنید یک کوئری را با استفاده از IQueryable اجرا می کنید ولی ToList نکردید. حالا اگر بخواهید نتیجه این کوئری را در 4 List قرار بدید 4 بار باید کوئری در سمت دیتابیس اجرا شود.
- یکی از تفاوت های اساسی بین این دو این است که اساسا IQueryable یک Expression به عنوان ورودی دریافت می کند ولی IEnumerable یک Func دریافت میکند.
- IEnumerable برای کار با داده ها در حافظه بسیار مناسب است.
- IQueryable بهترین گزینه برای کار با داده های درون Data Source می باشد. چون IQueryable توانایی کار با دیتابیس و دیتاسورس رو به صورت مستقیم دارد.
- یکی از تفاوت های اساسی بین IQueryable و IEnumerable این می باشد که در IEnumerable بعد از فراخوانی اطلاعات کرسر فراخوانی کننده رو به جلو حرکت می کند و شما توانایی زیادی برای جابه جایی بین رکوردهای واکشی شده ندارید.
تفاوتهای دیگه ای هم بین این دو مورد وجود داره که بنده فقط برخی از اونها رو عرض کردم. این لینک تفاوت های بسیار خوبی رو در مورد IQueryable و IEnumerable گفته که توصیه میکنم حتما مطالعه بفرمایید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- استفاده از دستور Group By در انتیتی فریم ورک
- محاسبه مجموع فروش بازاریاب و فروشنده در Sql Server
- کاربرد متد AsNoTracking در انتیتی فریم ورک
- فرق بین انتیتی فریم ورک با LINQ چیست
- دلیل خطای Keyword not supported: data source در انتیتی فریم ورک Code First
- ایجاد کانکشن استرینگ داینامیک در WPF (تغییر پایگاه داده و سرور در نرم افزار)
- تبدیل کاراکترهای عربی به فارسی در سی شارپ | تبدیل کاراکتر "ی" به "ی" در WPF
- جا به جایی بین رکوردها در DataGrid در WPF و نمایش در اطلاعات تکست باکس
- نحوه جوین جداول و نمایش داده های دلخواه از 2 جدول در انتیتی فریم ورک