无法强制转换System.Collections.Hashtable类型的对象

本文关键字:Hashtable 类型 对象 Collections System 转换 | 更新日期: 2023-09-27 18:11:07

我正在尝试完成与这个SO问题中描述的相同的事情。然而,在回应中提到的解决方案并不能解决我的问题。

暴露给我的API使用如下示例,缩短为特殊目的

IList results = CurrentSession.CreateSQLQuery("exec myStoredProc ...")
  .SetParameters("..", ...)
  .SetResultTransformer(new NHibernate.Transform.AliasToEntityMapResultTransformer())
  .List();
但是,我需要它是类型T的特定对象,它是一个自定义对象。我试着改变这个使用NHibernate List T(),但也没有运气。

如果我尝试强制转换这个,我通常会看到一个错误消息,声明无法对类型为'System.Collections '的对象进行大小写。

有没有人遇到过类似的问题,知道如何将其转换为与System.Collections.Hashtable不同的类型?我的主要目标是我需要使用LINQ语句来查询结果,而不能使用代码返回的illist。

我试图只是使用API原样,而不是改变,因为这已经在消费应用程序的其他地方使用。因此,如果有一种方法可以使用IList并对其进行强制转换,那是最好的。我理解这可能是由于使用了NHibernate.Transform.AliasToEntityMapResultTransformer而发生的。

谢谢你的建议。我已经在谷歌上搜索了这么多,还没有找到答案。

无法强制转换System.Collections.Hashtable类型的对象

这里的解决方案不应该这么复杂。如果你的实体看起来像:

public class MyEntity 
{
    public virtual int    Property1 { get; set; }
    public virtual string Property2 { get; set; }
    ...

,存储过程的结果如下:

SELECT col1 as Property1 // the same alias as property name is crucial
     , col2 as Property2
     ...

我们可以从内置的AliasToBean<TEntity>()变压器中获利:

IList<MyEntity> results = CurrentSession.CreateSQLQuery("exec myStoredProc ...")
  .SetParameters("..", ...)
  .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<MyEntity>())
  .List<MyEntity>();