我在.Net项目中使用NHibernate 2,我正在使用Linq2NHibernate提供程序。 这个简单的查询
var result = from d in session.Linq<Document>()
where d.CreationYear == 2010
select d.ChildEntity).ToList();
抛出一个异常告诉我,不可能将ChildEntity类型转换为Document类型。 这是为什么? 我还尝试在查询方法中翻译它,有
session.Linq<Document>()
.where(d=>d.CreationYear == 2010)
.select(d=>d.ChildEntity)
.ToList();
选择方法是不是应该将IQueryble投射到IQueryble中,因为TResult!= T?
答案 0 :(得分:1)
试试这个:
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有时表现得很奇怪。
答案 1 :(得分:0)
session.Linq<Document>()
.Where(d=>d.CreationYear == 2010)
.Select(d=>d.ChildEntity)
.ToList<T>(); //where T is typeof(ChildEntity)
答案 2 :(得分:0)
旧的Linq提供商非常有限,并且已经维持了好几年。
我建议你升级到最新稳定的NHibernate(3.2),它有一个更好(和集成)的Linq提供商。