2

在 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 Contains(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+'%'

4

3 回答 3

12
s.CreateCriteria<Client>().Add(
      Restrictions.InsensitiveLike( "LastName", "something", MatchMode.Anywhere))
于 2012-01-04T15:45:33.153 回答
1

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

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

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

于 2012-01-04T15:02:20.607 回答
0

对于不区分大小写的 %Like% 搜索

 Criteria criteria = session.createCriteria(Any.class);
 criteria.add(Restrictions.ilike(propertyName, value, MatchMode.ANYWHERE);
 criteria.list();
于 2015-04-23T13:38:02.607 回答