作为运行查询的结果,有什么方法可以获取我希望 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,并且我希望列强类型化。