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 at 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 に答える