как сгруппировать по диапазонам в nhibernate с критериями api - PullRequest
1 голос
/ 01 февраля 2011

У меня есть sql, который я хотел бы написать в Критерии API:

SELECT CASE 
WHEN total_pages = 0 THEN '0 pages'
WHEN total_pages BETWEEN 1 AND 3 THEN '1-3 pages'
WHEN total_pages BETWEEN 4 AND 6 THEN '4-6 pages'
WHEN total_pages > 6 THEN '7 + pages'
END AS pagerange, sum(total_pages) AS 'Total'
FROM dbo.connector_log_entry
GROUP BY 
CASE 
WHEN total_pages = 0 THEN '0 pages'
WHEN total_pages BETWEEN 1 AND 3 THEN '1-3 pages'
WHEN total_pages BETWEEN 4 AND 6 THEN '4-6 pages'
WHEN total_pages > 6 THEN '7 + pages'
END
ORDER BY pagerange

1 Ответ

0 голосов
/ 01 февраля 2011
var groupBy = @"
    CASE
      WHEN total_pages = 0 THEN '0 pages'
      WHEN total_pages BETWEEN 1 AND 3 THEN '1-3 pages'
      WHEN total_pages BETWEEN 4 AND 6 THEN '4-6 pages'
      WHEN total_pages > 6 THEN '7 + pages'
    END";
var pagerange = Projections.SqlGroupProjection(groupBy + " pagerange",
                                               groupBy,
                                               new[] { "pagerange" },
                                               new[] { NHibernateUtil.String });
var results = session.CreateCriteria<ConnectorLogEntry>()
                     .SetProjection(pagerange,
                                    Projections.Sum("TotalPages"))
                     .List();

Предполагается, что ваш класс называется ConnectorLogEntry, а свойство, сопоставленное столбцу total_pages, называется TotalPages.

Я должен вам бит ORDER BY, но вы всегда можете отсортировать на стороне клиента.

...