J'ai un modèle d'objet où un Order
contient de nombreux LineItems
et chaque LineItem
est associé à un Product
. Dans le modèle objet, il s'agit d'associations à sens unique -- une LineItem
ne sait rien de son Order
.
Je veux rechercher les commandes qui contiennent un poste avec un nom de produit correspondant à une chaîne de caractères, en retournant une ligne pour chaque commande (de sorte que la pagination puisse être effectuée).
SELECT * FROM Orders
WHERE OrderID IN (
SELECT DISTINCT OrderID
FROM LineItems
INNER JOIN Products on LineItems.ProductID = Products.ProductID
WHERE Products.Name = 'foo'
)
Étant donné que j'ai un ICriteria
ou un IQueryOver
représentant la sous-requête, comment puis-je l'appliquer à ma requête de commande racine ?
var subquery = QueryOver.Of<LineItem>
.Where(l => l.Product.Name == "foo")
.TransformUsing(Transformers.DistinctRootEntity);
J'ai trouvé de nombreux exemples qui partent du principe que l'objet Root de la requête se trouve du côté "many" d'une relation one-to-many, mais je n'arrive pas à trouver comment ajouter une restriction sur quelque chose que l'objet Root a beaucoup de .