次のSQLをNHibernateに変換しようとしています。
SELECT * FROM dbo.Customer
WHERE FirstName + ' ' + LastName LIKE '%' + 'bob smith' + '%'
私はこのようなことをしようとしていましたが、機能していません:
name = "%" + name + "%";
var customers = _session.QueryOver<Customer>()
.Where(NHibernate.Criterion.Restrictions.On<Customer>(c => c.FirstName + ' ' + c.LastName).IsLike(name))
.List();
私が基本的にやろうとしているのは、「bob smith」の値の例を使用してテキストボックスで顧客の名前を検索し、上記のSQLのLIKE式を使用してデータベースを検索できるようにすることです。
FirstName列とLastName列を間違って検索する場合は、別の方法を教えてください。ただし、上記のSQLクエリで必要なものが得られます。
2つのソリューションで更新:
だから私は今、この問題に対する2つの解決策を見つけました。1つは、CriteriaAPIを使用することです。次の投稿には、うまく機能する答えがあります:https ://stackoverflow.com/a/2937100/670028
私が見つけたもう1つの解決策は、LINQプロジェクションと匿名型の使用を提案してくれた親切な同僚の1人に感謝します。LINQを使用したソリューションは次のとおりです。
var customers = session.Query<Customer>()
.Select( x => new { FullName = x.FirstName + " " + x.LastName, Customer = x } )
.Where( x => x.FullName.Contains( "Bob Smith" ) )
.Select( x => x.Customer )
.ToList();