【发布时间】:2012-01-04 12:19:28
【问题描述】:
我有一个非常简单的问题,但找不到简单的答案。
我让 NHibernate 执行一个原始 SQL 查询,不幸的是它是从数据库中加载的(是的,我们将 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[](第三个选项)并获取第一个元素是行不通的,因为 nHibernate 返回一个 int 并且不能转换为 object[]。
有没有办法强制 nHibernate 总是返回一个 object[],即使是在单列的情况下?如果没有,是否有一种简单的方法可以检查结果中的列数并采取相应措施?
谢谢!
【问题讨论】:
-
NHibernate DTO 可能会满足您的需求。除了列表
-
如果你不知道你的查询会返回什么,那么你怎么知道如何处理结果,或者你是根据结果的形状来决定的?
-
我知道我需要一个 int 列表(基本上是 ID)。如果查询返回 1 列,这将是我需要的,但如果它返回多列,则第一列将是我需要的。然后我将这个 ID 列表向上传递以进行处理...我不知道结果的类型,因为查询是由其他进程动态生成的(它基本上是一种动态过滤的形式)。
标签: nhibernate