如何使用标准api在nhibernate中按范围分组
我想在Criteria api中编写sql:如何使用标准api在nhibernate中按范围分组,nhibernate,criteria-api,Nhibernate,Criteria Api,我想在Criteria api中编写sql: 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
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
var groupBy=@”
案例
当总页数=0时,则为“0页”
当总页数介于1和3之间时,则为“1-3页”
当总页数在4到6页之间时,则为“4-6页”
当总页数>6时,则为“7+页”
结束”;
var pagerange=Projections.SqlGroupProjection(groupBy+“pagerange”,
群比,
新[]{“页面范围”},
新[]{NHibernateUtil.String});
var results=session.CreateCriteria()
.SetProjection(页面范围,
预测总额(“总页数”)
.List();
这假设您的类名为ConnectorLogEntry
,映射到total_pages列的属性名为TotalPages
我欠你一点订单,但你总是可以在客户端排序。我自己也得到了几乎完全相同的代码。秩序也很好。我添加的一件事是var caseString=@“当总页数=0时为CASE,当总页数介于1和3之间时为'a0页',当总页数介于4和6之间时为'b1-3页',然后为'c4-6页'…字母表到页面范围以进行良好排序
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();