Не может проецировать объекты в 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)