通过可空整数对NHibernate查询结果进行分组

时间:2011-08-29 21:13:15

标签: nhibernate sorting integer grouping nullable

我正在使用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对这样的查询进行分组?

1 个答案:

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