Nếu bạn có thể chấp nhận CAST thay vì CONVERT (Và tôi gần như chắc chắn rằng bạn có thể làm được) , thì có một giải pháp đơn giản hơn.
Thay vì gọi "SQL Server liên quan" , hãy gọi hàm trừu tượng, sẽ hoạt động trên hầu hết các Máy chủ DB (dựa trên các pha loãng NHibernate được hỗ trợ)
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
Vì vậy, Restriction được sử dụng trong WHERE mệnh đề có thể trông như thế này:
Restrictions
.Like (
Projections.Cast(NHibernateUtil.String, Projections.Property(searchCol))
, "2009"
, MatchMode.Anywhere
)
Và kết quả được tạo bởi NHibernate, sử dụng phương ngữ SQL Server sẽ là:
WHERE cast( this_.theColumn as NVARCHAR(255)) like @p1 ... @p1=N'%2009%'