2つのプロパティの組み合わせを使用して、結果のリストをフィルタリングする必要がありました。単純なSQLステートメントは次のようになります。
SELECT TOP 10 *
FROM Person
WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
私が最終的に使用したNHibernateのICriteriaは次のとおりです。
ICriteria criteria = Session.CreateCriteria(typeof(Person));
criteria.Add(Expression.Sql(
"FirstName + ' ' + LastName LIKE ?",
"%" + term + "%",
NHibernateUtil.String));
criteria.SetMaxResults(10);
それは完璧に機能しますが、NHibernateのCriteria APIについてまだ学んでいるので、それが理想的なソリューションであるかどうかはわかりません。推奨される代替案は何ですか?
- それ以外
Expression.Sql
に同じ操作を実行するものはありますか?試しExpression.Like
ましたが、名前と名前を組み合わせる方法がわかりませんでした。 - FullNameプロパティをマッピングクラスの式"FirstName+'' + LastName"にマップする必要がありますか?
- ドメインオブジェクトに読み取り専用のFullNameプロパティを作成してから、それを列にマップする必要がありますか?