我有两个表 Invoice
和 InvoiceLineItem
。此 InvoiceLineItem
表包含:
Id
InvoiceId
Quantity
UnitPrice
列。我想创建 NHibernate QueryOver 语句来按
InvoiceId
对发票行项目进行分组,并获得 UnitPrice
和 Quantity
的乘积之和SQL是这样的。
SELECT InvoiceId, SUM(Quantity*UnitPrice) AS Total
FROM InvoiceLineItem
GROUP BY InvoiceId
我使用了
Projections.Sum
但我不确定如何将其中的两列相乘(如果这是正确的方法)。 最佳答案
看起来没有什么好方法可以做到这一点。基于 this answer 构建,您可以使用 VarArgsSQLFunction
:
InvoiceLineItem lineItemAlias = null;
session.QueryOver<InvoiceLineItem>(() => lineItemAlias)
.SelectList(list => list
.Select(Projections.Sum(
Projections.SqlFunction(new VarArgsSQLFunction("(", "*", ")"),
NHibernateUtil.Double,
Projections.Property(() => lineItemAlias.Quantity),
Projections.Property(() => lineItemAlias.UnitPrice))))
.SelectGroup(() => lineItemAlias.Invoice.Id)
// TransformUsing, List<>, etc.
这将生成如下所示的 SQL:
SELECT
sum((this_.Quantity*this_.UnitPrice)) as y0_,
this_.InvoiceId as y1_
FROM
InvoiceLineItem this_
GROUP BY
this_.InvoiceId