gpt4 book ai didi

c# - nHibernate QueryOver 在参数为空时获取所有记录

转载 作者:行者123 更新时间:2023-11-30 16:20:11 24 4
gpt4 key购买 nike

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

关于c# - nHibernate QueryOver 在参数为空时获取所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com