2008-12-30 4 views
2

J'essaie de créer l'équivalent de ce qui suit en utilisant NHibernate. J'ai fait tous les mappings en utilisant couramment et je peux faire les requêtes de base très bien, mais je n'ai aucune idée de comment faire cela.Comment les instructions IN() fonctionnent-elles dans NHibernate? (En utilisant des critères)

-**Product Table** 
Reference 
Title 
Subjects (Many to Many relationship) 
Price 

-**Subject table** 
SubjectID 
Name 

-**SubjectToProductMapping Table** 
Reference 
SubjectID 

Maintenant, je dois faire ceci:

SELECT * 
FROM Product 
WHERE Reference IN 
    (Select Reference FROM SubjectToProductMapping WHERE SubjectID = @SubjectID) 

Baring à l'esprit la table de produit a été simplifié beaucoup pour le poste et que je préférerais utiliser une instruction IN pour garder le reste de la requête plus simple. Idéalement, je voudrais créer la requête en utilisant des critères car je vais utiliser des critères pour la page des résultats.

Merci à l'avance

Répondre

0

Pourquoi utiliser une entrée lorsque une jointure suffirait? à condition que votre classe produits a une collection mappée de sujets alors vous pouvez utiliser ce critère

IList<Product> results = session.CreateCriteria(typeof(Product)) 
           .CreateCriteria("Subjects", JoinType.Join) 
           .Add(Resitctions.Eq(Projections.ID, subjectID)) 
           .List<Product>(); 
Questions connexes