我有两个表 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
关于c# - 创建 NHibernate Queryover 以获取两个字段乘积的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588942/