我有一个对象模型,其中Order
包含许多LineItems
,并且每个LineItem
都有一个关联的Product
。在对象模型中,这些是单向关联 - 一个LineItem
不知道任何关于它的Order
。如何使用NHibernate的QueryOver API表示包含WHERE..IN子查询的查询?
我想查询包含与产品名称匹配的字符串行项目的订单,每个订单(以便能够进行分页)返回一行。
SELECT * FROM Orders
WHERE OrderID IN (
SELECT DISTINCT OrderID
FROM LineItems
INNER JOIN Products on LineItems.ProductID = Products.ProductID
WHERE Products.Name = 'foo'
)
假设我有一个ICriteria
或代表的子查询的IQueryOver
,实际上,我怎么把它应用到我的根订单查询?
var subquery = QueryOver.Of<LineItem>
.Where(l => l.Product.Name == "foo")
.TransformUsing(Transformers.DistinctRootEntity);
我发现很多类似的假设在查询中的根对象的例子是对一个一对多关系的“多”的一面,但我无法弄清楚如何添加限制在根对象有很多。
尝试使用WithSubquery.WhereProperty – frictionlesspulley
如果LineItem的没有秩序的属性。那么你是如何在你的示例SQL中投射出OrderId的? – frictionlesspulley