0

作为运行查询的结果,有什么方法可以获取我希望 NHibernate 放置在 ICriteria 对象中的对象类型?在此代码示例中,我可以获取对象的类型(如果它们不为空),但如果它们为空呢?此外,根据返回的数据,一个“行”(object [])可能在其他行没有的地方有空字段 - 迫使我枚举所有行(最坏情况)以确定每一列(对象的索引[]) 应该。

我在哪里可以找到对象的预期类型(我创建的数组中每个对象的预期类型 - 显然它不会在我的数组上,但我希望它在 ICriteria 层次结构中的某个位置) ?

DetachedCriteria dc = DetachedCriteria.For<MyObject>().Add(...).SetProjection(...);

IList<object[]> list = dc.GetExecutableCriteria(session).List().OfType<object[]>().ToList();

foreach(object [] o in list)
{
   foreach(object p in o)
   {
      if(p != null)
         Type t = p.GetType();
      else
         throw new ApplicationException("Query returned null for column");
   }
}

我问这个是因为必须实际检查 NHibernate 返回的结果似乎是错误的方法。反射似乎也没有任何帮助,因为在检查返回的 ICriteria 对象(CriteriaImpl 对象)时,除了在实际结果“行”/“列”上之外,我无法在任何地方找到对象类型的实例。

我问是因为我试图从 NHibernate 结果动态创建一个 DataTable,并且我希望列强类型化。

4

1 回答 1

0

返回的类型是您查询的类型。如果您的用户正在添加自定义列并自由查询,您将不知道您在查询什么,因此如果不检查实际对象,您将无法获得强类型结果。

AFAIK 这是 NHibernate 的一个限制。

于 2009-07-10T03:52:51.187 回答