nhibernate CreateCriteria通配符喜欢的时候

时间:2012-01-04 14:51:45

标签: nhibernate createcriteria

在SQL中我可以写

SELECT blah FROM Clients Where @p1 Like '%'+lastname+'%'

如何用Nhibernate中的CreateCriteria表示这个?

我试过了s.CreateCriteria<Client>.Add(Restrictions.Where<Client>(c => "something".Contains(c.LastName))

但收到错误

  

System.Exception:无法识别的方法调用:System.String:Boolean包含(System.String)\ r \ n在NHibernate.Impl.ExpressionProcessor.ProcessCustomMethodCall(MethodCallExpression methodCallExpression)

我也试过

s.CreateCriteria<Client>.Add(Restrictions.Where<Client>(c => "something".IndexOf(c.LastName) != -1))

但是

  

“范围''引用的'TrinityFinance.Data.Entities.Client'类型的变量'c',但未定义”

请注意,此处的订单非常重要。

@p1 Like '%'+lastname+'%'

不同

lastname Like '%'+@p1+'%'

3 个答案:

答案 0 :(得分:12)

s.CreateCriteria<Client>().Add(
      Restrictions.InsensitiveLike( "LastName", "something", MatchMode.Anywhere))

答案 1 :(得分:1)

感谢朋友,我已经解决了我的问题。

var searchCriteria = GetSession().CreateCriteria<Client>(); searchCriteria.Add(Expression.Sql(string.Format("'{0}' like '%' + {1} + '%'", p.ClientInputText,p.DbField)));

var results = searchCriteria.List<Client>();

答案 2 :(得分:0)

Case-Insensitive%Like%Search

 Criteria criteria = session.createCriteria(Any.class);
 criteria.add(Restrictions.ilike(propertyName, value, MatchMode.ANYWHERE);
 criteria.list();