我在一个类中有一个方法,它允许我根据一组客户指定的条件返回结果。该方法将客户在前端指定的内容与来自数据库的集合中的每个项目相匹配。在客户未指定任何属性的情况下,将属性的 ID 传递给等于 0 的方法(数据库在所有表上都有一个标识,该标识以 1 为种子并且是增量的)。在这种情况下,应该忽略该属性,例如,如果客户未指定位置,则 customerSearchCriteria.LocationID = 0 进入方法。然后匹配将匹配其他属性并返回与其他属性匹配的所有位置,示例如下:
public IEnumerable<Pet> FindPetsMatchingCustomerCriteria(CustomerPetSearchCriteria customerSearchCriteria)
{
if(customerSearchCriteria.LocationID == 0)
{
return repository.GetAllPetsLinkedCriteria()
.Where(x => x.TypeID == customerSearchCriteria.TypeID &&
x.FeedingMethodID == customerSearchCriteria.FeedingMethodID &&
x.FlyAblityID == customerSearchCriteria.FlyAblityID )
.Select(y => y.Pet);
}
}
指定所有条件时的代码如下所示:
private PetsRepository repository = new PetsRepository();
public IEnumerable<Pet> FindPetsMatchingCustomerCriteria(CustomerPetSearchCriteria customerSearchCriteria)
{
return repository.GetAllPetsLinkedCriteria()
.Where(x => x.TypeID == customerSearchCriteria.TypeID &&
x.FeedingMethodID == customerSearchCriteria.FeedingMethodID &&
x.FlyAblityID == customerSearchCriteria.FlyAblityID &&
x.LocationID == customerSearchCriteria.LocationID )
.Select(y => y.Pet);
}
每次客户没有明确选择他们正在寻找的结果的属性时,我想避免使用一整套if 和 else 语句来满足需求。我可以实现这一目标的最简洁和有效的方法是什么?