我有来自不同类别和国家/地区的产品,是否有人知道我必须传递哪些价值才能展示来自所有国家/地区的产品或来自所有类别的产品而非特定产品?类似/ List?categoryId =“”& countryId =“”
一位同事告诉我要执行以下操作: 我认为你应该使用可以为null的整数(int?)作为categoryid参数的类型:
public ActionResult List(int? categoryid, int? page, string countryId)
{
var products = null;
if (categoryid.HasValue && !string.IsNullOrEmpty(countryId)) {
products = ProductRepository.FindCategoryProducts(categoryid, countryId).AsPagination(page.GetValueOrDefault(1), 20);
} else if (categoryid.HasValue == false && string.IsNullOrEmpty(countryId)) {
products = ProductRepository.GetAllProducts();
} else {
/// check the other cases here...
return View(products);
}
}
但似乎如果我只有两个参数是可能的,但是有很多参数,我会有很多if - else if if显示所有可能性。
这是过滤数据或存在任何其他选项的唯一方法吗?
任何帮助将不胜感激。 brgds
更新!!:
杰兰,你好,非常感谢你。我有以下控制器:public ActionResult List(int categoryid, int? page, string countryId)
{
var products = ProductRepository.FindCategoryProducts(categoryid, countryId).AsPagination(page.GetValueOrDefault(1), 20);
return View(products);
}
Productrepository:
public IQueryable<Product> FindCategoryProducts(int categoryId, string countryId)
{
return from product in db.product
where product.CategoryId == categoryId
&& product.CountryId == countryId
orderby product.CreatedOn
select product;
}
然后我可以通过url Product / list?categoryId = 2&amp; countryId = us。但如果我想要检索所有产品,无论哪个国家/地区使用可空字符串,我都会收到错误。 这就是为什么这位同事建议我创建 - if / elseif语句 - 考虑所有参数的可能性,但如果作为一个例子,我有8个参数似乎是一个很长的陈述。
谢谢你!答案 0 :(得分:2)
这没有神奇的答案。为了允许对大量可空标准进行过滤,在某处确定如何处理空参数的逻辑。我建议将其作为ProductRepository的责任,而不是页面的Controller。这样可以更容易地在其他控制器中重用相同的逻辑,而不必复制和粘贴它。
如果您使用的是LINQ,则可以在Where子句中执行类似的操作
where Product == (productParm ?? Product)
如果您在SQL中执行此操作,则可以使用类似的运算符
where Product = COALESCE(productParm, Product)
就您提供的查询而言,假设您有其他字符串属性A&amp; B过滤:
public IQueryable<Product> FindCategoryProducts(int categoryId, string countryId, string filterA, string filterB)
{
return from product in db.product
where product.CategoryId == categoryId
&& product.CountryId == (String.IsNullOrEmpty(countryId) ? product.CountryID : countryId)
&& product.PropertyA == (String.IsNullOrEmpty(filterA) ? product.CategoryA : filterA)
&& product.PropertyB == (String.IsNullOrEmpty(filterB) ? product.CategoryB : filterB)
// and so on...
orderby product.CreatedOn
select product;
}
的更多信息