Не может проецировать объекты в Linq 2 NHibernate

Я работаю с NHibernate 2 в.Net проекте и использую провайдер 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();

Разве метод select не предназначен для проецирования IQueryble в IQueryble, т. К. TResult!=T?

3 ответа

Решение

Старый поставщик Linq крайне ограничен и не обслуживался в течение нескольких лет.

Я предлагаю вам обновить до последней стабильной версии NHibernate (3.2), которая имеет гораздо лучший (и интегрированный) провайдер Linq.

Попробуй это:

   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 иногда ведет себя очень странно, когда вы пытаетесь выбрать только объект.

Вы можете попробовать это:

session.Linq<Document>()
   .Where(d=>d.CreationYear == 2010)
   .Select(d=>d.ChildEntity)
   .ToList<T>();     //where T is typeof(ChildEntity)
Другие вопросы по тегам