Als je de CAST
. zou kunnen accepteren in plaats van CONVERT
(En ik ben er bijna zeker van dat je dat kunt) , dan is er een eenvoudigere oplossing.
In plaats van "SQL Server-gerelateerd" te noemen functie, laten we de abstractie aanroepen, die op de meeste DB-servers zou moeten werken (gebaseerd op ondersteunde NHibernate-dilacts)
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
Dus de Restriction
gebruikt in een WHERE
clausule kan er als volgt uitzien:
Restrictions
.Like (
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
, "2009"
, MatchMode.Anywhere
)
En het resultaat gegenereerd door NHibernate, met behulp van het SQL Server-dialect zou zijn:
WHERE cast( this_.theColumn as NVARCHAR(255)) like @p1 ... @p1=N'%2009%'