2015-10-30 2 views
0

Je ces classes:collection enfant NHibernate limitation

public class Document 
{ 
    public Document() 
    { 
     Descriptions = new List<Descriptions>(); 
    } 

    public virtual int Id { get; set; } 
    public virtual IList<DocumentDescription> Descriptions { get; set; } 
} 

public class DocumentDescription 
{ 
    public virtual int DocumentId { get; set; } 
    public virtual int LanguageId { get; set; } 
} 

et applications:

public DocumentMap() 
{ 
    Id(x => x.Id); 

    HasMany(x => x.Descriptions).KeyColumn("DocumentId"); 
} 

public DocumentDescriptionMap() 
{ 
    CompositeId() 
     .KeyProperty(x => x.DocumentId) 
     .KeyProperty(x => x.LanguageId); 
} 

ma requête est:

var query = Session.QueryOver<Document>().Where(x => x.Id.IsIn(documentIds)).List(); 

Je besoin d'une requête sur une solution pour limiter DocumentDescriptions par quelques langues, que je vais avoir l'exécution. Je ne veux pas obtenir toutes les descriptions de document pour un document (seulement quelques-unes). Est-il possible de définir un filtre/une limitation pour une collection enfant?

Répondre

0

Donc, je trouve comment ajouter d'autres se joindre à l'article à ma question:

DocumentDescription dd = null; 
ICriterion criterion = Restrictions.On<DocumentDescription>(x => x.LanguageId).IsIn(languageIds.ToArray()); 

var query = Session.QueryOver<Document>().Where(x => x.Id.IsIn(documentIds)); 
query.Left.JoinQueryOver(x => x.Descriptions,() => dd, criterion); 

SQL:

SELECT * FROM tDocument 
LEFT OUTER JOIN tDocumentDescription ON tDocumentDescription.DocumentId = tDocument.Id AND tDocumentDescription.LanguageId IN (@languageIds) 
WHERE tDocument.Id IN (@documentIds)