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%'