تنفيذ 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 |
تعليقات
إرسال تعليق