c# – 搜索条件和NULL

我在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组合在一起,而且还可以调整更多功能;)

点赞