NHibernate:返回一个应用了聚合函数的强类型列表

时间:2009-11-25 15:59:09

标签: nhibernate

我想让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可以推断出为每条记录实例化的正确类型。

由于

1 个答案:

答案 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