Linq to NHibernate - Как вернуть родительский объект, включив только определенные дочерние объекты - PullRequest
0 голосов
/ 28 апреля 2010

С учетом упрощенной модели, подобной следующей:

public class Enquiry
{
    public virtual DateTime Created { get; set; }
    public virtual Sender Sender { get; set; }
}

public class Sender
{
    public virtual IList<Enquiry> Enquiries { get; set; }
}

Как вы можете построить запрос Linq to Nhibernate так, чтобы он возвращал вам список отправителей и их запросов, где запросы удовлетворяют некоторым критериям. Я пробовал что-то вроде этого:

return session.Linq<Enquiry>()
   .Where(enquiry => enquiry.Created < DateTime.Now)
   .Select(enquiry => enquiry.Sender)

В этом случае я получаю InvalidCastException, в котором говорится, что вы не можете привести тип Отправителя к типу Запрос.

Есть ли какие-нибудь указатели на то, как я могу сделать это без использования HQL?

1 Ответ

0 голосов
/ 28 апреля 2010

Поставщик Linq в NHibernate 2.x очень ограничен и обычно имеет проблемы с проекциями объектов.

Ваш запрос, вероятно, работает с включенным поставщиком Linq в NHibernate 3.x.

HQL это просто:

select Sender
from Enquiry
where Created < current_timestamp

(Вы также можете использовать параметр для DateTime.Now)

...