NHibernate的。按功能排序结果

时间:2011-07-08 10:06:33

标签: nhibernate sql-order-by

我需要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

那么,也许可以在标准中添加额外的字段(或者可能是投影),就像在这个例子中一样?

1 个答案:

答案 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>();