nHibernate QueryOver在参数为空时获取所有记录
本文关键字:获取 记录 QueryOver 参数 nHibernate | 更新日期: 2023-09-27 17:56:10
>我有以下情况。我有Customer
和CompanyCustomerAssignment
对象(具有 1:1 的关系)。CompanyCustomerAssignment
的其中一个属性是 CustomerGroup
。现在 - 我想QueryOver
- 当CustomerGroup
被传递时,而不是获取属于该组Customers
,但是当它显示为空时,我想查询所有内容。好吧,在"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 部分更有效率,我们可以做更多的技巧......