متدهای Take و Skip در LINQ

جمعه 25 دی 1394

زبان LINQ به برنامه نویسان NET. اجازه نوشتن queryهای مختلف درزبان NET. را می دهد تا بتوانند داده ها را از بانک اطلاعاتیSQL Server بازیابی و تغییر دهند. به طور عام، LINQ اجازه ایجاد queryهای SQL در syntax زبان NET. انتخابی مان و کار کردن با مجموعه ای قوی از اشیا به عنوان نتیجه برگشتی را به ما می دهد. می توان تغییراتی را در این اشیا بوجود آورد و سپس دوباره آنها را در database ذخیره کرد. متدهای مختلفی در زبان LINQ تعریف شده اند که در مقاله متدهای Take و Skip آن را مورد بررسی قرار می دهیم.

متدهای Take و Skip در LINQ

فرض کنید نیاز دارید که یک مجموعه را چاپ کنید اما در 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 تای بعدی انتخاب می شوند و به همین ترتیب انجام می شوند.

خروجی به صورت زیر می شود:

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 2 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید