我有以下情况。我有CustomerCompanyCustomerAssignment对象(具有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部分更加有效,我们可以做更多的技巧...

07-25 22:35
查看更多