NHibernate-Criteria APIを使用して整数列に対してLIKE検索を行う最も簡単な方法は?

StackOverflow https://stackoverflow.com/questions/1231054

  •  22-07-2019
  •  | 
  •  

質問

整数列に対して類似検索を実行しようとしていますが、実際に必要なのは、列をvarcharにキャストしてから類似検索を実行することです。これは可能ですか? Criteria APIを使用してこれを行う最も簡単な方法は何ですか?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
役に立ちましたか?

解決

Numberが文字列の場合、簡単になります:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

数字があるので、NHibernateは数字のタイプをチェックし、文字列を指定すると例外をスローします。

NHチームがパラメーターとしてオブジェクトとMatchModeパラメーターを使用してオーバーロードを提供しなかった理由がわからない....

とにかく、あなたはまだこのようにそれを行うことができます:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

編集

エイリアスについて:

(ドキュメンテーションがこれについて述べている場所を見つけることができませんが、ここに私の理解があります)

{alias}は、最新のCreateCriteriaでNHが内部で使用するエイリアスを返します。もしあなたが持っているなら:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();
この場合、

{alias}は 'doc'になります。したがって、最終的にはdoc.Numberになります。

したがって、エイリアスを使用する必要があるCreateCriteriaの後には必ず{alias}を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top