我有一個對象模型,其中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