Группировка результатов запроса NHibernate по nullable целому числу - PullRequest
0 голосов
/ 30 августа 2011

Я использую NHibernate для запроса таблицы с кортежами в формате: (String, Int?), Где целые числа могут быть нулевыми. Итак, я хочу сгруппировать результаты по номеру, а затем отсортировать по алфавиту. Я могу легко сделать это после того, как получу результаты запроса, но я бы хотел, чтобы NHibernate сформулировал запрос, который это делает. Вот пример результатов, которые мне бы хотелось:

альфа, 1
дельта, 4
гольф, 3
Отель, 2
Лима, 5
Чарли, 0
тета, 0
бета, ноль
эхо, ноль

Три группы, которые я ищу: (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 Ответ

1 голос
/ 30 августа 2011

что-то вроде:

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();
...