无法在Linq 2 NHibernate中投影实体



我在一个.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)

最新更新