我在Web API中使用以下方法模式来搜索给定一组条件的实体:
public IEnumerable<Employee> Search(SearchCriteria searchCriteria)
{
var employees = _dbContext.Employees;
if(searchCriteria.Age.HasValue)
{
employees = employees.Where(e => e.Age == searchCriteria.Age.Value);
}
if(searchCriteria...)
{
employees = employees.Where(e => ...);
}
return employees;
}
如果未指定搜索条件,则SearchCriteria对象上的属性将为null,我根本不会根据此条件进行过滤.如果已指定,则它将具有值,并用于过滤.
从设计的角度来看,问题在于,如果我真的想要没有年龄的员工,我就不能这样做,因为我使用null来确定我是否会使用给定的标准.
我应该考虑采用哪种其他方法来包含两种情况?
也许查看URI而不是让Web API进行对象映射,我可以确定标准是否实际存在?
mysite.com/api/employee?keyword=a&age=null
VS
mysite.com/api/employee?keyword=a
最佳答案 我想你必须稍微延长你的SearchCriteria.而不是Nullable< T>像Nullable< int>这样的属性年龄你需要一个更详细的结构,如果要检查该标准,它会给你信息.
这可能还可以让您选择不仅将您的标准与逻辑AND组合在一起,而且还可以调整更多功能;)