Se potessi accettare il CAST invece di CONVERT (E sono quasi sicuro che puoi) , allora c'è una soluzione più semplice.
Invece di chiamare "SQL Server related" funzione, chiamiamo l'astrazione, che dovrebbe funzionare sulla maggior parte dei server DB (basato sui dilatti NHibernate supportati)
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
Quindi la Restriction utilizzato in un WHERE la clausola potrebbe assomigliare a questa:
Restrictions
.Like (
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
, "2009"
, MatchMode.Anywhere
)
E il risultato generato da NHibernate, utilizzando il dialetto di SQL Server sarebbe:
WHERE cast( this_.theColumn as NVARCHAR(255)) like @p1 ... @p1=N'%2009%'