hibernate转换结果在字典中

时间:2011-04-13 15:00:31

标签: nhibernate

您好 我想如何在nhibernate中有一个特定的输出

var hql = @"select t1.info1, t2.info2
                    from table1 t1
                    left outer join t1.table2 t2";
var variable = session.CreateQuery(hql).List();

该查询返回包含另一个数组的对象数组。 即:在第一行中,info1可以通过变量[0] [0]检索 在同一行中,info2可以通过变量[0] [1]

检索

我知道我可以创建一个像

这样的新类
class SpecificQuery
{
  public int info1;
  public int? info2
}

and then call :

session.CreateQuery(hql)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(SpecificQuery))).List();

但是每次我想要特别的回报时,我都不想创建一个特定的类。

有人知道该问题的解决方案吗? 例如,IList< Dictionnary< string,object>> [] 在这种情况下,info1的第一行可以通过variable0检索(如果是变量[0] [0]

由于

2 个答案:

答案 0 :(得分:4)

NHibernate提供了可以在这里使用的Tuple类:

var hql = @"select t1.info1 as First, t2.info2 as Second
                from table1 t1
                left outer join t1.table2 t2";

// instead of Tuple<String, decimal> you can use other types of course
var variable = session.CreateQuery(hql)
        .SetResultTransformer(new AliasToBeanResultTransformer(
             typeof(NHibernate.Linq.Tuple<String, decimal>)))
        .List<NHibernate.Linq.Tuple<String, decimal>>();

然后,您将使用

访问这些项目
variable[0].First
variable[0].Second

答案 1 :(得分:4)

您可以使用AliasToEntityMapResultTranformer

session.CreateQuery(hql)
   .SetResultTransformer(Transformers.AliasToEntityMap).List();

这将返回一个IDictionary对象列表。