تنفيذ Paging باستخدام Skip و Take في LINQ

تنفيذ Paging باستخدام Skip و Take في LINQ

في هذا الدرس، سنتعرّف على كيفية استخدام دالتي Skip() و Take() لتطبيق التقسيم إلى صفحات (Paging)، وهي تقنية تُستخدم لعرض البيانات على صفحات متعددة بطريقة منظمة وسهلة.



ما هو Paging؟

هو أسلوب لتقسيم كمية كبيرة من البيانات إلى صفحات، بحيث يتم عرض عدد محدود من العناصر في كل صفحة. مثال:

  • عندك 100 عنصر وتعرض 10 في كل صفحة → هيكون عندك 10 صفحات.
  • الصفحة 3 مثلًا تبدأ من العنصر 21 وتنتهي عند العنصر 30.


كيفية تنفيذ Paging في LINQ:

  • Skip(n): يتجاوز عدد معين من العناصر.
  • Take(n): يأخذ عدد معين من العناصر بعد التجاوز.

المعادلة:


.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
  • pageNumber: رقم الصفحة الحالية (يبدأ من 1).
  • pageSize: عدد العناصر لكل صفحة.


مثال عملي:


List<string> students = new List<string>
{
    "Mahmoud", "Sara", "Alaa", "Noor", "Ahmed",
    "Omar", "Eman", "Salma", "Kareem", "Yara",
    "Mona", "Ramy", "Tamer", "Laila", "Fady"
};

int pageNumber = 2;
int pageSize = 5;

var result = students
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize);

foreach (var student in result)
{
    Console.WriteLine(student);
}


النتيجة (صفحة رقم 2):


Omar  
Eman  
Salma  
Kareem  
Yara


ملاحظات مهمة:

  • Skip() لا يُطلق استثناء حتى لو تجاوز عدد العناصر → فقط يُرجع تسلسل فارغ.
  • Take() تأخذ العدد المطلوب أو أقل حسب المتاح.
  • عند pageNumber = 1 يتم تنفيذ Skip(0).Take(pageSize).


السيناريوهات الشائعة:

  • عرض المنتجات في متجر إلكتروني.
  • نتائج البحث.
  • عرض بيانات المستخدمين، الطلبات، أو أي جداول.


دمج Paging مع فلترة:


var pagedResult = students
    .Where(s => s.StartsWith("M"))
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize);


مقارنة سريعة بين الصفحات:

الصفحة Skip Take من العنصر إلى العنصر
1 Skip(0) Take(5) 1 5
2 Skip(5) Take(5) 6 10
3 Skip(10) Take(5) 11 15


 

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework