无法强制转换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而发生的。
谢谢你的建议。我已经在谷歌上搜索了这么多,还没有找到答案。
这里的解决方案不应该这么复杂。如果你的实体看起来像:
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>();