NHibernate ICriteria和预期类型

时间:2009-07-02 18:05:55

标签: c# nhibernate datatable icriteria

有没有什么方法可以获得我希望NHibernate作为运行查询的结果放在ICriteria对象中的对象类型?在这个代码示例中,如果它们不是null,我可以得到我的对象的类型,但如果它们是什么呢?此外,根据返回的数据,一个“行”(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对象)时,我无法在任何地方找到实例,而是在实际结果“row”/“column”中找到实例。

我问,因为我试图从NHibernate结果中动态创建一个DataTable,我希望列强列表。

1 个答案:

答案 0 :(得分:0)

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

AFAIK这是NHibernate的一个限制。