我有一个场景,我需要在 NHibernate QueryOver 查询中对属性 (User.Name) 进行排序,其中该属性包含一个字符串,我需要获取名称的最后一部分并订购 ASC。如果我对返回的结果执行此操作,则可能类似于:
.....
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 中,它将是 SUBSTRING、CHARINDEX(可能还有其他函数)的组合,以获取名称的最后部分(即 Joe Smith、Jane A. Doe)并按姓氏排序。
问题
在 NHibernate QueryOver 中是否有一种方法可以设置它,您不必在 NHibernate 调用的存储过程中汇总它或通过 .CreateSQlQuery(sql) 传递原始 SQL 查询?
而是直接将此逻辑构建到 QueryOver 中?