当参数为null时,nHibernate QueryOver获取所有记录

时间:2013-01-27 22:41:44

标签: c# nhibernate null

我有以下情况。我有CustomerCompanyCustomerAssignment个对象(1:1关系)。 CompanyCustomerAssignment中的一个属性是CustomerGroup。 现在 - 我希望QueryOver - 传递CustomerGroup时,而不是属于此组的fetch 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没有这样的属性,这听起来合乎逻辑但对我没有帮助。

1 个答案:

答案 0 :(得分:3)

在这种情况下,我们知道执行查询之前的条件@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() ... 扩展条件。

{{1}}

这使SQL部分更有效率,我们可以做更多的技巧......