虽然SQL Server非常适合做:
where Id like '45%'
(id是一个int),NH会抱怨,因为在执行时它仍会尝试将比较值作为int类型的SqlParameter发送到sql中:
q.WhereRestrictionOn(cl => cl.CompanyId).IsLike(companyIdFilter)
那么如何使用新的QueryOver API绕过它呢?
答案 0 :(得分:7)
经过一番挖掘和反复试验后,这就解决了这个问题:
q.Where(Expression.Like(
Projections.Cast(
NHibernateUtil.String,
Projections.Property<ChangeLog>(cl => cl.CompanyId)),
companyIdFilter.Value.ToString(),
MatchMode.Start
));