3

我有以下情况。我有CustomerCompanyCustomerAssignment对象(具有 1:1 的关系)。中的属性之一CompanyCustomerAssignmentCustomerGroup。现在 - 我想QueryOver- 何时CustomerGroup通过,而不是 fetchCustomers属于该组,但是当它为 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没有这样的属性,这听起来合乎逻辑,但对我毫无帮助。

4

1 回答 1

4

在这种情况下,我们在执行查询之前就知道条件@param is NULL,或者在组装之前更好。custGrp因此,让我们仅在 Criteria 被填充时扩展 Criteria 。

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 部分更高效,我们可以做更多的技巧......

于 2013-01-28T05:54:05.543 回答