名前の最後の部分を取得して ASC を注文するために必要な文字列がプロパティに含まれている NHibernate QueryOver クエリで、プロパティ (User.Name) の並べ替えを実行する必要があるシナリオがあります。返された結果でそれを行っていた場合、次のようになります。
.....
var query = session.QueryOver<User>().....
.....
query.OrderBy(u => SortByLastName(u.Name));
private string SortByLastName(string name)
{
if (string.IsNullOrEmpty(name)) {
name = " ";
}
var nameArray = name.Trim().Split(' ');
var lastName = nameArray[nameArray.Length - 1];
return lastName.ToLower();
}
SQL では、名前の最後の部分 (つまり、Joe Smith、Jane A. Doe) を取得し、姓でソートするために、SUBSTRING、CHARINDEX (および場合によっては他の関数) を組み合わせます。
質問
NHibernate QueryOver でこれをセットアップする方法はありますか? NHibernate によって呼び出されるストアド プロシージャにロールアップする必要がなかったり、.CreateSQlQuery(sql) を介して生の SQL クエリを渡したりする必要はありませんか?
しかし、代わりに、このロジックを QueryOver に直接組み込みますか?