如何使用标准api在nhibernate中按范围分组

如何使用标准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

我想在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 '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();