如何在 C# 中将 nhibernate List 转换为 IList<T>
How to convert nhibernate List to IList<T> in C#
我有一个来自 NHibernate 结果集的模型对象列表,希望有一个通用方法将其转换为
IList
我有这个
var l = session.CreateSQLQuery(@query).SetResultTransformer(Transformers.AliasToEntityMap).List();
需要转换为
IList<T> ls = new List<T>();
这样从 nhibernate 返回的任何列表都可以轻松匹配到任何模型 class
我试过了
List<T> newList = l.Cast<T>().ToList();
但出现错误
System.InvalidCastException: Unable to cast object of type 'System.Collections.Hashtable' to type SalesModel
其中 SalesModel 是 T 我的通用模型
也试过了
var l = session
.CreateSQLQuery(@query)
.SetResultTransformer(Transformers.AliasToBean<SalesModel>())
.List();
IList<SalesModel> newList = l.Cast<SalesModel>().ToList();
并收到此错误
A first chance exception of type 'NHibernate.PropertyAccessException' occurred in NHibernate.dll
NHibernate.PropertyAccessException: The type System.Decimal can not be assigned to a property of type System.Int32 setter of model.SalesModel.total ---> System.ArgumentException: Object of type 'System.Decimal' cannot be converted to type 'System.Int32'.
这是我的模型class
public class SalesModel
{
public virtual String barcode { get; set; }
public virtual String product_name { get; set; }
public virtual int total { get; set; }
}
问题是返回的集合 l
包含 System.Collections.Hashtable
类型的项目。这是因为您使用了 Transformers.AliasToEntityMap
表示:
Each row of results is a map (System.Collections.IDictionary) from alias to values/entities.
要制作 SalesModel
类型的物品,您需要使用 Transformers.AliasToBean<SalesModel>()
其中:
Creates a result transformer that will inject aliased values into instances of T via property methods or fields.
然后你可以转换它或使用 List<T>()
代替:
IList<SalesModel> list = session
.CreateSQLQuery(@query)
.SetResultTransformer(Transformers.AliasToBean<SalesModel>())
.List<SalesModel>();
我有一个来自 NHibernate 结果集的模型对象列表,希望有一个通用方法将其转换为 IList
我有这个
var l = session.CreateSQLQuery(@query).SetResultTransformer(Transformers.AliasToEntityMap).List();
需要转换为
IList<T> ls = new List<T>();
这样从 nhibernate 返回的任何列表都可以轻松匹配到任何模型 class
我试过了
List<T> newList = l.Cast<T>().ToList();
但出现错误
System.InvalidCastException: Unable to cast object of type 'System.Collections.Hashtable' to type SalesModel
其中 SalesModel 是 T 我的通用模型
也试过了
var l = session
.CreateSQLQuery(@query)
.SetResultTransformer(Transformers.AliasToBean<SalesModel>())
.List();
IList<SalesModel> newList = l.Cast<SalesModel>().ToList();
并收到此错误
A first chance exception of type 'NHibernate.PropertyAccessException' occurred in NHibernate.dll
NHibernate.PropertyAccessException: The type System.Decimal can not be assigned to a property of type System.Int32 setter of model.SalesModel.total ---> System.ArgumentException: Object of type 'System.Decimal' cannot be converted to type 'System.Int32'.
这是我的模型class
public class SalesModel
{
public virtual String barcode { get; set; }
public virtual String product_name { get; set; }
public virtual int total { get; set; }
}
问题是返回的集合 l
包含 System.Collections.Hashtable
类型的项目。这是因为您使用了 Transformers.AliasToEntityMap
表示:
Each row of results is a map (System.Collections.IDictionary) from alias to values/entities.
要制作 SalesModel
类型的物品,您需要使用 Transformers.AliasToBean<SalesModel>()
其中:
Creates a result transformer that will inject aliased values into instances of T via property methods or fields.
然后你可以转换它或使用 List<T>()
代替:
IList<SalesModel> list = session
.CreateSQLQuery(@query)
.SetResultTransformer(Transformers.AliasToBean<SalesModel>())
.List<SalesModel>();