我正在使用NHibernate查询具有以下格式的元组的表:(String,Int?),其中整数可以为null。所以,我想按编号对结果进行分组,然后按字母顺序排序。在我得到查询结果后,我可以很容易地做到这一点,但我想让NHibernate制定一个查询来完成它。以下是我想要的结果示例:
alpha,1
delta,4
高尔夫,3
酒店,2
lima,5
查理,0
theta,0
beta,null
echo,null
我正在寻找的三个分组是:(int> 0),(int == 0)和(int = null)。这是我正在使用的查询:
var devices = session.QueryOver<Table>()
.OrderBy(item => item.Number).Desc
.OrderBy(item => item.Name).Asc
.List();
目前,我在查询完成后对它们进行排序,如下:
List<Table> sortedDevices = devices.OrderBy(item => item.Name).Where(item => item.Number > 0).ToList();
sortedDevices = sortedDevices.Concat(devices.OrderBy(item => item.Name).Where(item => item.Number == 0).ToList()).ToList();
sortedDevices = sortedDevices.Concat(devices.OrderBy(item => item.Name).Where(item => item.Number == null).ToList()).ToList();
是否有可能让NHibernate对这样的查询进行分组?
答案 0 :(得分:1)
一些事情:
session.QueryOver<User>()
.Select(Projections.Alias(Projections
.Conditional(Expression.Gt("Number", 0),
Projections.Constant(1),
Projections.Conditional(Expression.Eq("Number", 0),
Projections.Constant(0),
Projections.Constant(-1))),
"group"))
.OrderBy(Projections.Property("group")).Desc
.ThenBy(table => table.Name).Asc
.List();