不能在Linq 2 NHibernate中投影实体

时间:2012-01-04 11:42:53

标签: linq nhibernate linq-to-nhibernate nhibernate-projections

我在.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?

3 个答案:

答案 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提供商。

相关问题