Подстановочный знак nhibernate CreateCriteria

В 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 ответа

Решение

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

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

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

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

Поиск без учета регистра%Like%

 Criteria criteria = session.createCriteria(Any.class);
 criteria.add(Restrictions.ilike(propertyName, value, MatchMode.ANYWHERE);
 criteria.list();
Другие вопросы по тегам