Rip*_*ppo 0 nhibernate ilist casting
我尝试使用dyanmic实例化将以下NHibernate查询转换为IList <t>而不是IList.
IList<AllName> allNames =
(IList<AllName>)Session.CreateQuery(
@"select new AllName(
name.NameId, name.FirstName, origin.OriginId, origin.Description,
name.Sex, name.Description, name.SoundEx
) from Name name join name.Origin origin")
.SetFirstResult(skip)
.SetMaxResults(pageSize);
Run Code Online (Sandbox Code Playgroud)
运行这个我收到以下错误: -
无法将类型为'NHibernate.Impl.QueryImpl'的对象强制转换为'System.Collections.Generic.IList`1 [Domain.Model.Entities.AllName]'.
我知道我可以回来
IList results = Sesssion.CreateQuery(...
Run Code Online (Sandbox Code Playgroud)
但我的服务层期待一个
IList<AllName>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
一种选择是编写一个IList<T>代理a的实现IList,在适当的地方进行转换.它应该不会太难,虽然有点单调乏味.LINQ将在实现IEnumerable<T>等方面稍微简化一下- 你可以调用底层迭代器并调用Cast<T>()它,例如.
另一种解决方案是List<T>从返回的列表中创建一个新的:
IList query = Session.CreateQuery(...);
IList<AllName> allNames = new List<AllName>(query.Cast<AllName>());
Run Code Online (Sandbox Code Playgroud)
编辑:正如桑德如此正确地指出,这ToList是为了:
IList query = Session.CreateQuery(...);
return query.Cast<AllName>().ToList();
Run Code Online (Sandbox Code Playgroud)
编辑:所有这一切都是NHibernate不可知的,因为它 - 我实际上并不了解NHibernate.Rippo现在发现了一个更简单的答案 - 调用List<AllName>(这是一个NHibernate方法).
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |