单列结果上的NHibernate SQL查询映射

时间:2012-01-04 12:19:28

标签: nhibernate

我有一个非常简单的问题,但找不到简单的答案。

我让NHibernate执行原始SQL查询,遗憾的是从DB加载(是的,我们在数据库中存储SQL查询,而不是最好的设计,但请耐心等待)。这意味着基本上我不知道查询将返回多少列。 我所知道的是,如果查询是单个列,那么它就是我需要的,如果它是多个列,那么我需要第一个,这很容易。

在我的代码中,我基本上有3个选项:

session.CreateSQLQuery(SQLString).List();
session.CreateSQLQuery(SQLString).List<object>();
session.CreateSQLQuery(SQLString).List<object[]>();

问题是,如果查询返回单个列,List()将返回List<int>(或适当的类型,但int应该是我的情况),如果我返回List<object[]>()有多列。 List<object>也是如此,但在这种情况下它不会返回List<int>。 当然试图总是强制转换为object [](第3个选项)并获取第一个元素不起作用,因为nHibernate返回一个int并且不能转换为object []。

有没有办法强制nHibernate总是返回一个对象[],即使在单列的情况下?如果没有,是否有一种简单的方法来检查结果中的列数并采取相应的行动?

谢谢!

1 个答案:

答案 0 :(得分:3)

你应该看一下NHibernate开箱即用的不同结果变换器(当然你也可以编写自己的变换器)。

适合您的情况可能是NHibernate.Transform.ToListResultTransformer。 AFAIK,它将您的结果转换为IList,其中每个条目都包含一个IList。

所以:

IList items = session
.CreateSQLQuery(query)
.SetResultTransformer(new NHibernate.Transform.ToListResultTransformer())
.List()

if(((Ilist)items[0]).Count == 1)
// just one columns
else
// more columns or zero