2010-04-28 3 views
0

Étant donné un modèle simplifié comme suit:LINQ to NHibernate - Comment retourner un objet parent avec seulement certains objets enfants inclus

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; } 
} 

Comment pouvez-vous construire une requête LINQ to NHibernate telle qu'elle vous rend une liste des expéditeurs et de leurs demandes lorsque les demandes répondent à certains critères. J'ai essayé quelque chose comme ceci:

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

Dans ce cas, je reçois un InvalidCastException dire que vous ne pouvez pas lancer Sender type à l'enquête.

Des pointeurs sur comment je peux faire cela sans utiliser HQL?

Répondre

0

Le fournisseur de Linq dans NHibernate 2.x est très limité et il a généralement des problèmes avec les projections d'entités.

Votre requête fonctionne probablement avec le fournisseur Linq inclus dans NHibernate 3.x.

HQL est facile:

select Sender 
from Enquiry 
where Created < current_timestamp 

(Vous pouvez également utiliser un paramètre pour DateTime.Now)

Questions connexes