2012-03-03 37 views
3

我使用休耕HQL查询与NHibernate ISNULL():NHibernate的HQL与在不工作

from Contact a where 
a.Id in (select x.Person.Id from PersonCompany x 
      inner join x.Company y 
      inner join y.Addresses z 
     where isnull(z.Street,'')+isnull(z.PostalCode,'') Like :val) 

在此查询,NHibernate的尝试转换:VAL(这是一个字符串)双。 z.Street和z.PostalCode是可以为空的字符串字段。看起来NHibernate对where子句中的第一个isnull()有问题。当我使用z.Street+isnull(z.PostalCode,'')它正在工作。 我也尝试过cast(isnull(z.Street,'')+isnull(z.PostalCode,'') as string),但这也不起作用,因为NHibernate对cast函数有一个问题(它会产生两个以上的参数)。 有人可以帮助我,我怎么可以用NHibernate解决这个问题? - 也许有另一种方式来写出where条件?

我使用的NHibernate 3.2

回答

3

尝试concat(coalesce(z.Street,''), coalesce(z.PostalCode,''))

+0

此genereates休耕其中:(ISNULL(addresses3_.Street + '')+ ISNULL(addresses3_.PostalCode + '')),其抛出SQLException与消息ISNULL函数需要2个参数 – BennoDual 2012-03-05 19:44:06

+0

尝试新版本。大多数方言都没有注册“isnull”; “coalesce”是标准。它可能工作时使用它自己的,因为NHibernate传递它。 – 2012-03-05 19:56:33

+0

我现在试过这个,它会工作完美:-) – BennoDual 2012-03-05 19:58:07