我在一个.Net项目中使用NHibernate 2,我使用的是Linq2NHibernate提供程序。这个简单的查询
var result = from d in session.Linq<Document>()
where d.CreationYear == 2010
select d.ChildEntity).ToList();
抛出一个异常,告诉我不可能强制转换ChildEntity类型do Document类型。为什么?我还试着用查询方法翻译它,有
session.Linq<Document>()
.where(d=>d.CreationYear == 2010)
.select(d=>d.ChildEntity)
.ToList();
select方法不是应该将IQueryble投影到IQuerybble中吗=T
试试这个:
var result = (from d in session.Linq<Document>()
where d.CreationYear == 2010
select new ChildEntityType
{ /* here just do a simple assignments for all ChildEntityType fields
d.ChildEntity */ } ).ToList();
是的,这看起来可能很愚蠢,但当你试图只选择一个对象时,linq2nhibernate有时会表现得很奇怪。
旧的Linq提供程序非常有限,已经有好几年没有维护了。
我建议您升级到最新的稳定的NHibernate(3.2),它有一个更好的(集成的)Linq提供商。
你能试试这个吗:
session.Linq<Document>()
.Where(d=>d.CreationYear == 2010)
.Select(d=>d.ChildEntity)
.ToList<T>(); //where T is typeof(ChildEntity)