简而言之,我想要以下分组功能:http://demos.telerik.com/aspnet-mvc/grid/index 但是,我似乎无法弄清楚如何使我的后端动态检索这些数据。
我有以下一行:
query.UnderlyingCriteria.SetProjection(Projections.GroupProperty("PropertyNumber"));
其中查询的类型为IQueryOver。
然而,当我使用
时var statistics = query.List<T>();
我得到了
“值”000000 \“不是”SDS“类型,不能在此通用集合中使用。\ r \ n参数名称:值”}
000000是默认属性编号,SDS是我尝试分组的对象。对我来说很明显,我写的是试图将字符串作为值返回。
有趣的是,以下内容返回表中的确切行数。
var rowCount = query.RowCount();
我的问题是,如果投影不能做我想要的,我如何以分组的方式实际返回SDS?
答案 0 :(得分:2)
一般有两个问题:
有了这个我们可以得到这样的列表:
// 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有自己的方式来声明投影