nhibernate hql子查询:将null转换为零

时间:2014-10-08 09:12:52

标签: sql nhibernate

我试图将一个表中特定金额的总和更新为另一个表中的值,但是当另一个表中不存在特定ID时会出现问题:

hql我看起来像beow:

        var session = SessionManager.GetCurrentSession();
        var queryString = string.Empty;

        queryString += @"update CLiner cl set cl.UnbilledDue = 
            (select sum(cu.UnbilledAmount) as UnbilledAmount from CUnbilled cu 
                      where cu.AccountNo = cl.AccountNo and cu.FileDate = :fileDate) 
        where cl.FileDate = :fileDate ";

        var query = session.CreateQuery(queryString);
        query.SetDateTime("fileDate", new DateTime(2014, 10, 7));
        query.ExecuteUpdate();

但是当子表中不存在特定帐户号并且该总和返回为零时,它会给出异常。

我尝试将子查询选择更改为

        select isnull(sum(cu.UnbilledAmount),0) as UnbilledAmount

nhibernate hql不支持预期的。所以有一种方法可以在hql select语句中将null转换为零...

1 个答案:

答案 0 :(得分:0)

试试这个:

coalesce(sum(cu.UnbilledAccount), 0)

原因: 通常,当您查询SQL查询以防止NULL时,您必须在ISNULL上应用SELECT函数,这样:

ISNULL(SELECT sum(...., 0) or COALESCE(SELECT sum(...., 0) (return the same result but COALESCE can applied with more parameter, ISNULL has only two parameters)

但是在HQL中是不可能的,因此您可以使用COALESCE函数来防止这种行为。