我需要NHibernate来执行这样的查询:
SELECT *
FROM Users
ORDER BY Func(FirstName, LastName)
Standart NHibernate Order
类不允许这样做。还有别的办法吗?
事实上,命名查询和HQL不适合作为解决方案。
编辑:我发现,可以在SQL上执行:
SELECT *, Func(FirstName, LastName) AS FullName
FROM Users
ORDER BY FullName
那么,也许可以在标准中添加额外的字段(或者可能是投影),就像在这个例子中一样?
答案 0 :(得分:14)
首先,您不需要创建“全名”,按两列排序。你可以这样做:
SELECT *
FROM Users
ORDER BY FirstName, LastName
- 编辑
或者,如果要定义排序,可以在每列之后包含“asc / desc”:
SELECT *
FROM Users
ORDER BY FirstName DESC, LastName ASC
- 结束编辑
至于NHibernate的排序,如果你使用的是QueryOver,你可以这样做:
var result = Session.QueryOver<Users>()
.OrderBy(x => x.FirstName).Desc
.ThenBy(x => x.LastName).Desc
.List();
至于Criteria,我认为(不是100%肯定)你可以这样做:
var result = Session.CreateCriteria(typeof(Users))
.AddOrder(Order.Desc("FirstName"))
.AddOrder(Order.Desc("LastName"))
.List<Users>();