QueryOver有条件地具有多个或零个Where子句

时间:2013-10-25 09:15:34

标签: queryover

我正在做一个基本的NHibernate查询,想要添加一个可能有几个过滤器或根本没有过滤器的'Where'子句。

然而,根据用户选择,可能有几个或没有要过滤,即返回全部。是否有办法有条件地添加where子句并在没有任何过滤器时省略它?

所以我基本上不确定如何使用QueryOver添加几个或零个where子句。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用

 Restrictions.Conjunction()

举个例子:

 
private IQueryOver<CustomerEntity> QueryForCustomer(int? companyCode, int[] zipCodes)
{        
    var customerRestritcions = Restrictions.Conjunction();
    if (companyCode.HasValue)
    {
        customerRestritcions.Add(Restrictions.Eq(Projections.Property<CustomerEntity>(c => c.CompanyCodeId), companyCode));
    }

    if (zipCodes != null)
    {
        customerRestritcions.Add(Restrictions.In(Projections.Property<CustomerEntity>(c => c.ZipCode), zipCodes));
    }

    return Session.QueryOver<CustomerEntity>(() => customer)
        .Where(customerRestriction)         
}