آشنایی با اینترفیس های IEnumerable و IQuerable
یکشنبه 10 خرداد 1394در این مقاله قصد دارم توضیحی درباره تفاوت اینترفیس های IEnumerable و IQuerableبه شما دوستان بدهم IEnumerable و IQuerable هر دو نوعی اینترفیس در مجموعه های .Netهستند.
IEnumerable و IQuerable هر دو نوعی اینترفیس در مجموعه های .Net هستند اینترفیس IQuerable، از اینترفیس IEnumerable ارث بری کرده است به عبارت دیگر هر کاری که اینترفیس IEnumerable انجام میدهد این اینترفیس نیز انجام میدهد پس سوال اصلی اینجاست که فرق بین این دو اینترفیس چیست و چرا مایکروسافت به فکر ایجاد اینترفیس IQuerable افتاد
حال اکنون میپردازیم به تفاوت این دو رابط کاربری یا همان اینترفیس
آشنایی با IEnumerable
:IEnumerableدر فضای نام System.Collections قرار دارد
در IEnumerable فقط می توان به سمت جلو حرکت کرد. نمی توان به سمت عقب یا بین آیتمها حرکت کرد.
IEnumerable بهترین انتخاب برای query گرفتن از داده های ذخیره شده در مجموعه های موجود در حافظه مانند List و Array است.
وقتی یک query روی بانک اطلاعاتی انجام می شود، IEnumerable ابتدا آن query را سمت Server اجرا کرده، داده ها را در سمت کلاینت در حافظه بارگذاری و سپس آنها را فیلتر می کند
: Enumerable از Custom Query ها پشتیبانی نمی کند.
IEnumerable از بارگذاری دیرهنگام (Lazy Loading) پشتیبانی نمی کند بنابراین برای سناریوهایی مانند صفحه بندی مناسب نیست.
برای استفاده از IEnumerable ها میتوان از متدد GetEnumerator استفاده کرد و داده های خود را با استفاده از حلقه foreach تکرار کرد
MyDataContext dc = new MyDataContext (); IEnumerable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S")); list = list.Take<Employee>(10);
عبارت تولید شده در Sql
SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0] WHERE [t0].[EmpName] LIKE @p0
این نکته را یاد اوری کنم که عمل فیلتر کردن (10 آیتم آخر) در سمت کاربرانجام می شود و معادل آن SQL تولید نشده است.
آشنایی با IQueryable:
IQueryable در فضای نام System.Linq قرار دارد.
در IQueryable فقط می توان به سمت جلو حرکت کرد. نمی توان به سمت عقب یا بین آیتمها حرکت کرد
IQueryable بهترین انتخاب برای کار با مجموعه های خارج از حافظه مانند بانکهای اطلاعاتی و سرویس هاست.
وقتی یک query روی یک بانک اطلاعاتی اجرا شود، IQueryable دستور select آن را به همراه همه فیلترها در سرور اجرا می کند
IQueryable از Custom Query ها با استفاده از متدهای CreateQuery و Execute پشتیبانی می کند.
IQueryable از بارگذاری دیرهنگام پشتیبانی می کند بنابراین برای سناریوهایی مانند صفحه بندی مناسب است
• MyDataContext dc = new MyDataContext (); • IQueryable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S")); • list = list.Take<Employee>(10);
عبارت تولید شده در Sql
SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0] WHERE [t0].[EmpName] LIKE @p0
- C#.net
- 8k بازدید
- 6 تشکر