متدهای Take و Skip در LINQ
جمعه 25 دی 1394زبان LINQ به برنامه نویسان NET. اجازه نوشتن queryهای مختلف درزبان NET. را می دهد تا بتوانند داده ها را از بانک اطلاعاتیSQL Server بازیابی و تغییر دهند. به طور عام، LINQ اجازه ایجاد queryهای SQL در syntax زبان NET. انتخابی مان و کار کردن با مجموعه ای قوی از اشیا به عنوان نتیجه برگشتی را به ما می دهد. می توان تغییراتی را در این اشیا بوجود آورد و سپس دوباره آنها را در database ذخیره کرد. متدهای مختلفی در زبان LINQ تعریف شده اند که در مقاله متدهای Take و Skip آن را مورد بررسی قرار می دهیم.
فرض کنید نیاز دارید که یک مجموعه را چاپ کنید اما در m بخش و n بار. برای درک بهتر آن می توانید این را به سیستم عامل نسبت دهید. شما m صفحه را در یک زمان می خوانید و داده های شما را در M صفحه پراکنده است. این بدان معناست که هر صفحه شامل M/K داده است.
این سوال مطرح می شود که چگونه داده ها را به راحتی از هر قطعه بخوانیم.
پاسخ: از Linq برای رسیدن به یک رفتار مطلوب استفاده می کنیم، متد زیر یک صفحه بندی ساده توسط LINQ را نشان می دهد:
private static IEnumerable < int > PrintPages5AtATimes(List < int > intList, int iteration, int page, int pageSize) { //pageSize 5 //page 20 // iteration 20 19 18 17 ......1 return intList.Skip(pageSize * iteration - pageSize).Take(pageSize); }
استفاده از متد بالا:
Action < int > action = i => { Debug.WriteLine(i); }; //print 5 each time int page = 20, pageSize = 5; for (int i = page; i <= page && i > 0; i--) { IEnumerable < int > result = PrintPages5AtATime(intList, i, page, pageSize); Debug.WriteLine("\n"); Debug.WriteLine(i + " Page"); Debug.WriteLine("\n"); Array.ForEach(result.ToArray(), action); }
فرض می کنیم 100MB داده در 20صفحه توزیع شده است که اندازه هر صفحه 5MB است.
کد بالا کمک می کند که داده ها به صورت یک به یک در جهت معکوس بازیابی شوند. این بدان معناست که 20 قطعه که هرکدام شامل 5 المان باشد را چاپ می کند.
متد Skip از روی تعدادی از المان های ارسال شده به آن می پرد و از مجموعه IEnumerable شروع می کند و متد Take با توجه به آرگومان آن n تعدادی ارسال شده به آن را می گیرد.
در تکرار اول ما باید 100 عنصر در کل داشته باشیم که 95 تا از آنها صرف نظر شده و 5تای آنها انتخاب می شوند، و در تکرار دوم ابتدا 90 تا از آنها صرف نظر شده و 5 تای بعدی انتخاب می شوند و به همین ترتیب انجام می شوند.
خروجی به صورت زیر می شود:
- C#.net
- 3k بازدید
- 2 تشکر