Подстановочный знак nhibernate CreateCriteria - PullRequest
2 голосов
/ 04 января 2012

В SQL я могу написать

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

Как мне представить это с помощью CreateCriteria в Nhibernate?

Я пробовал 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))

, но получаю

"переменную" c "типа" TrinityFinance ".Data.Entities.Client 'ссылка из области действия' ', но он не определен "

Обратите внимание, здесь важен порядок.

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

не совпадает с

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

Ответы [ 3 ]

12 голосов
/ 04 января 2012
s.CreateCriteria<Client>().Add(
      Restrictions.InsensitiveLike( "LastName", "something", MatchMode.Anywhere))
1 голос
/ 04 января 2012

Благодаря другу я решил мою проблему.

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

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

0 голосов
/ 23 апреля 2015

Для нечувствительных к регистру% Like% Поиск

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