我想让nHibernate使用HQL从CreateQuery调用返回一个强类型列表。
我们希望返回一个强类型的“MyType”列表,但我们想在返回结果集之前将聚合函数应用于结果集。不幸的是,据我所知,添加聚合字段意味着nHibernate无法将结果与我们的“MyType”类型的签名相匹配。
我们如何解决这个问题?以下查询描述了我们想要从数据库返回的内容 - 但“feedcount”字段会影响nHibernate确定要返回的类型列表的能力。
select feedname, count(feedurl) as feedcount from rsssubscriptions group by feedurl, feedname order by feedcount desc
大概必须在事件序列的早期生成结果集,以确保nHibenate可以推断出为每条记录实例化的正确类型。
由于
答案 0 :(得分:3)
以下是您需要做的事情:
IList<MyObj> reults = Session.CreateQuery("select r.feedname as feedname, count(r.feedurl) as feedcount from rsssubscriptions r group by r.feedname")
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(myobj)))
.List<MyObj>();
然后像这样定义MyObj类型:
public class MyObj
{
public virtual long feedcount { get; set; }
public virtual string feedname { get; set; }
}
上述类型的属性名称必须与返回属性的别名相同,并且所有属性都必须是虚拟的。
阅读以下文章,了解有关使用SetResultTransformer()方法可以执行的操作的更多信息: http://www.junasoftware.com/blog/nhibernate-setresulttransformer-and-dto.aspx