ببینید دوست من , بستگی به برنامه شما هم داره که چه اندازه داینامیک باشه از نظر back-end و front-end
در همین سابت بالا جستجو بر اساس دسته -رنگ -برند-جنس هست
اگر این طراحی همیشه ثابت باشه و برای همه کالا ها همینجوری صدق کند
شما یک ویومدل برای جستجو میسازید
مثلا
public class ProductSearchViewModel
{
//برای جستجوی قیت public decimal price?{ get; set; }
//یک اینام برای مشخص کردن رنگ که در سمت کلاینت تبدیل به چک باکس میشود
public EnumColor Color{ get; set; }
//یک اینام برای مشخص کردن سایز البته میتوان بجای اینام از متغیرهای بولی هم استفاده کرد
public EnumSize Size{ get; set; }
یا
public EnumSize[] Size{ get; set; }
}
معمولا کوئری اول شما معولا یک کوئری بدون where هست که کل کالا ها در یک ویو نمایش داده میشه
var list;
list=contect.products.tolist()
چنانچه خواستید بر اساس یک فیلد فیلتر کنید
چون مقادیر جستجو از سمت کلاینت در ویومدل ریخته میشود
باید یک جستحوی شرطی بسازید
public IQueryable<Product> GetProducts(ProductSearchViewModel searchModel)
{
var result = Context.Products.AsQueryable();
if (searchModel != null)
{
if (searchModel.price.HasValue)
result = result.Where(x => x.price== searchModel.price);
//بیشتر از صفر نشان دهنده مقدار داشتن هستif (searchModel.Color>0)
result = result.Where(x => x.Color ==searchModel.Color);
if (searchModel.Size>0)
result = result.Where(x => x.Color == searchModel.Size);
}
return result;
}
اگر چند مقدار رنک انتخاب شده باشد فیلد را بصورت آرایه تعریف کنید و در جستجو هم ازContains استفاده کنید