2012-03-03 36 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