さて、基本的に私は10の最も売れた製品を手に入れる方法を見つけようとしています。次のSQLクエリで簡単に達成できること:
SELECT `product`.*
FROM `product`
INNER JOIN `sale_item` ON `product`.`id` = `sale_item`.`product_id`
GROUP BY `product`.`id`
ORDER BY SUM(`sale_item`.`quantity`) DESC
LIMIT 10;
NHibernateで成功するのに最も近かったのは、これだと思います。
ICriteria criteria = NHibernateSession
.CreateCriteria<SaleItem>("SaleItem")
.SetMaxResults(10)
.CreateCriteria("ID.Product")
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("ID.Product"))
.Add(Projections.Sum("SaleItem.Quantity"), "QuantitySum")
)
.AddOrder(Order.Desc("QuantitySum"));
List<Product> l = criteria
.List<Product>() as List<Product>;
これは次のSQLを生成しました(私のものと非常に似ています):
SELECT this_.product_id AS y0_,
sum(this_.quantity) AS y1_
FROM sale_item this_
INNER JOIN product product1_ ON this_.product_id=product1_.id
GROUP BY this_.product_id
ORDER BY y1_ DESC LIMIT 10;
残念ながら、クエリの実行時に失敗しました。それは私がやって.CreateCriteria<SaleItem>
から尋ねることと関係があると私はかなり確信していますが、私.List<Product>
はそれを他の方法で行う方法がわかりません。
どんな助けでも深く感謝します。