我有以下情况。我有Customer
和CompanyCustomerAssignment
对象(具有1:1关系)。 CompanyCustomerAssignment
中的属性之一是CustomerGroup
。
现在-我想QueryOver
-通过CustomerGroup
时,要获取属于该组的Customers
,但是当它为null时,我要查询所有内容。好吧,在“ SQL”中看起来很简单:
...WHERE CustomerGroupId = @param OR @param is NULL;
不幸的是,我对QueryOver一无所知(
custGrp
是参数-可以是对象或null
)Customer c = null;
CompanyCustomerAssignment cca = null;
_session.QueryOver<Customer>(() => c)
.JoinAlias(() => c.CompanyCustomerAssignment, () => cca)
.Where(() => cca.Company == currentCompany && c.IsActive == true)
.And(() => cca.CustomerGroup == custGrp || custGrp == null ) // <- this seems to be problem to me
.List()
.Select(x => new CustomerApiModel() {CustomerId = x.Id})
.ToList();
但这是行不通的-我收到一条消息,说
Customer
没有这样的属性,听起来很合逻辑,但对我没有任何帮助。 最佳答案
在这种情况下,我们知道条件@param is NULL
在执行查询之前,或者在组装之前更好。因此,仅当custGrp
填充时,才让它扩展条件。
var criteria = _session.QueryOver<Customer>(() => c)
.JoinAlias(() => c.CompanyCustomerAssignment, () => cca)
.Where(() => cca.Company == currentCompany && c.IsActive == true);
// if during the query build
if(custGrp != null)
{
criteria.Where(() => cca.CustomerGroup == custGrp);
}
var results = criteria
.List()
...
这使SQL部分更加有效,我们可以做更多的技巧...