gpt4 book ai didi

C#/NHibernate - 获取按分组总和排序的前 10 条记录

转载 作者:行者123 更新时间:2023-11-29 01:43:42 25 4
gpt4 key购买 nike

嗯,基本上我是想找出一种方法来获得 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> , 但我不知道如何以其他方式做到这一点。

非常感谢任何帮助。

最佳答案

您可以使用 Transformers.AliasToBean<Product>()结果转换器:

ICriteria criteria = NHibernateSession
.CreateCriteria<SaleItem>("SaleItem")
.SetMaxResults(10)
.CreateCriteria("ID.Product")
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("ID.Product"), "ID")
.Add(..., "...") // another Product property
.Add(Projections.Sum("SaleItem.Quantity"), "QuantitySum")
)
.AddOrder(Order.Desc("QuantitySum"));

List<Product> l = criteria
.SetResultTransformer(Transformers.AliasToBean<Product>());
.List<Product>() as List<Product>;

关于C#/NHibernate - 获取按分组总和排序的前 10 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12946620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com