Я использую благородные предшественники HQL-запрос с NHibernate:NHibernate HQL с ISNULL() в котором не работает
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 имеет проблему с первым isnull() в where-clause. Когда я использую z.Street+isnull(z.PostalCode,'')
, он работает. Я также пробовал cast(isnull(z.Street,'')+isnull(z.PostalCode,'') as string)
, но это тоже не работает, потому что NHibernate имеет проблему с функцией cast (он генерирует более двух параметров). Может кто-нибудь мне помочь, как я могу решить это с помощью NHibernate? - Может быть, есть еще один способ написать условие-условия?
Я использую NHibernate 3,2
это genereates в парование, где: (IsNull (addresses3_.Street + '') + IsNull (addresses3_.PostalCode + '')), который выбрасывает SqlException с СООБЩЕНИЯ IsNull функция требует 2 аргумента (ов) – BennoDual
Попробуйте новую версию. 'isnull' не зарегистрирован для большинства диалектов; «coalesce» - это стандарт. Он может работать, когда используется сам по себе, потому что NHibernate передает его. –
Я пробовал это прямо сейчас, и он будет работать идеально :-) – BennoDual