Nhibernate获取按列分组的行
本文关键字:获取 Nhibernate | 更新日期: 2023-09-27 18:24:01
简而言之,我想要以下分组功能:http://demos.telerik.com/aspnet-mvc/grid/index然而,我似乎不知道如何使我的后端能够动态地检索这些数据。
我有以下线路:
query.UnderlyingCriteria.SetProjection(Projections.GroupProperty("PropertyNumber"));
其中查询的类型为IQueryOver。
然而,当我使用时
var statistics = query.List<T>();
我得到
"值''"000000''"不是''"SDS"类型,不能在此通用集合中使用。''r''n参数名称:value"}
000000是默认的属性编号,SDS是我试图分组的对象。对我来说,很明显,我所写的内容是试图将字符串重新作为值。
有趣的是,下面返回了表中的确切行数。
var rowCount = query.RowCount();
那么,我的问题是,如果投影不能达到我想要的效果,我如何以分组的方式返回SDS?
通常有两个问题:
- 一旦我们使用了投影,我们想要得到的任何其他属性也必须被投影
- 如果有一个投影,我们需要得到一个实体列表,我们需要结果transformer
有了这些,我们可以得到这样的列表:
// the As() is essential for result transformer
query
.UnderlyingCriteria
.SetProjection(Projections.GroupProperty("PropertyNumber")
.As("PropertyNumber"));
// set Transformer
query.TransformUsing(Transformers.AliasToBean<T>());
// the list of T, but only PropertyNumber is filled by NHibernate
var list = query.List<T>();
或者这是为了获得更多的属性填充
query
.UnderlyingCriteria
.SetProjection(
Projections.ProjectionList()
.Add(Projections.GroupProperty("PropertyNumber").As("PropertyNumber"))
.Add(Projections.Count("ID").As("Count"))
....
)
;
// set Transformer to some DTO
query.TransformUsing(Transformers.AliasToBean<U>());
// the list of DTO, with more than PropertyNumber filled
var list = query.List<U>(); // generic U representing DTO
最后,QueryOver
API有自己的方法来声明投影
- 16.6.预测