не может проецировать объекты в Linq 2 NHibernate - PullRequest
1 голос
/ 04 января 2012

Я работаю с NHibernate 2 в проекте .Net и использую провайдер Linq2NHibernate. Этот простой запрос

var result = from d in session.Linq<Document>()
where d.CreationYear == 2010
select d.ChildEntity).ToList();

выдает исключение, сообщающее, что невозможно преобразовать тип ChildEntity в тип документа. Это почему? Я также пытался перевести его в методы запроса, имея

session.Linq<Document>()
   .where(d=>d.CreationYear == 2010)
   .select(d=>d.ChildEntity)
   .ToList();

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

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Попробуйте:

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

0 голосов
/ 04 января 2012

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

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

0 голосов
/ 04 января 2012

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

session.Linq<Document>()
   .Where(d=>d.CreationYear == 2010)
   .Select(d=>d.ChildEntity)
   .ToList<T>();     //where T is typeof(ChildEntity)
...