2013-10-25 67 views
0

我正在做一個基本的NHibernate查詢,並希望添加一個可能的「Where」子句,它可能有幾個過濾器或根本沒有。QueryOver有條件地有多個或零Where子句

但是,根據用戶的選擇,可能會有幾個或沒有任何要過濾的東西,即全部返回。有什麼方法可以有條件地添加where子句並在沒有任何內容過濾時省略它?

因此,我基本上不確定如何使用QueryOver添加幾個或零的where子句。

謝謝。

回答

1

你可以利用的

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)   
}