.NET API - فلترة وترتيب البيانات (Filtering, Sorting, Pagination)
2.3 .NET API - فلترة وترتيب البيانات (Filtering, Sorting, Pagination)
عند عرض بيانات كثيرة في Web API، من الأفضل توفير مرونة للمستخدم مثل:
- 🔍 فلترة (Filter) حسب شروط معينة
- ⬆️⬇️ ترتيب (Sort) حسب اسم أو تاريخ أو سعر
- 📄 تقسيم الصفحات (Pagination) لتقليل الحمل وتسريع الأداء
🔍 مثال على الفلترة Filtering
[HttpGet]
public IActionResult GetAll(string? search)
{
var query = _context.Products.AsQueryable();
if (!string.IsNullOrWhiteSpace(search))
query = query.Where(p => p.Name.Contains(search));
return Ok(query.ToList());
}
مثال على الرابط:
GET /api/products?search=laptop
⬆️⬇️ مثال على الترتيب Sorting
public IActionResult GetAll(string? sort)
{
var query = _context.Products.AsQueryable();
if (sort == "name")
query = query.OrderBy(p => p.Name);
else if (sort == "price_desc")
query = query.OrderByDescending(p => p.Price);
return Ok(query.ToList());
}
مثال:
GET /api/products?sort=price_desc
📄 مثال على Pagination
public IActionResult GetPaged(int page = 1, int pageSize = 10)
{
var query = _context.Products
.Skip((page - 1) * pageSize)
.Take(pageSize);
return Ok(query.ToList());
}
مثال:
GET /api/products?page=2&pageSize=5
🧠 الجمع بين الفلترة + الترتيب + التقسيم
public IActionResult GetAdvanced(string? search, string? sort, int page = 1, int pageSize = 10)
{
var query = _context.Products.AsQueryable();
if (!string.IsNullOrWhiteSpace(search))
query = query.Where(p => p.Name.Contains(search));
if (sort == "price_desc")
query = query.OrderByDescending(p => p.Price);
else
query = query.OrderBy(p => p.Name);
var result = query
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
return Ok(result);
}
📌 ملاحظات هامة
- ✅ الأفضل دائمًا أن يتم تنفيذ الفلترة قبل الترتيب.
- ✅ استخدم AsQueryable لتأجيل التنفيذ حتى نهاية السلسلة.
- ✅ يمكن تحسين الأداء أكثر بإرجاع عدد الصفحات أو عدد النتائج الكلي.
تعليقات
إرسال تعليق