NHibernate的.按功能排序结果

Ser*_*lov 6 nhibernate sql-order-by

我需要NHibernate来执行这样的查询:

SELECT * 
FROM Users
ORDER BY Func(FirstName, LastName)
Run Code Online (Sandbox Code Playgroud)

Standart NHibernate Order类不允许这样做.还有别的办法吗?
事实上,命名查询和HQL不适合作为解决方案.

编辑:我发现,有可能对SQL做:

SELECT *, Func(FirstName, LastName) AS FullName 
FROM Users
ORDER BY FullName
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*ill 14

首先,您不需要创建"全名",按两列排序.你可以这样做:

SELECT * 
FROM Users
ORDER BY FirstName, LastName
Run Code Online (Sandbox Code Playgroud)

-编辑

或者,如果要定义排序,可以在每列之后包含"asc/desc":

SELECT * 
FROM Users
ORDER BY FirstName DESC, LastName ASC
Run Code Online (Sandbox Code Playgroud)

- 结束编辑

至于NHibernate中的排序,如果你使用的是QueryOver,你可以这样做:

var result = Session.QueryOver<Users>()
                    .OrderBy(x => x.FirstName).Desc
                    .ThenBy(x => x.LastName).Desc
                    .List();
Run Code Online (Sandbox Code Playgroud)

至于Criteria,我认为(不是100%肯定)你可以这样做:

var result = Session.CreateCriteria(typeof(Users))
                    .AddOrder(Order.Desc("FirstName"))
                    .AddOrder(Order.Desc("LastName"))
                    .List<Users>();
Run Code Online (Sandbox Code Playgroud)