.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 لتأجيل التنفيذ حتى نهاية السلسلة.
  • ✅ يمكن تحسين الأداء أكثر بإرجاع عدد الصفحات أو عدد النتائج الكلي.

تعليقات

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

C# - Arrays

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

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