c# - 创建 NHibernate Queryover 以获取两个字段乘积的总和

标签 c# nhibernate queryover

我有两个表 InvoiceInvoiceLineItem .这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/

相关文章:

.net - memcached 或 lucene.net 与 nhibernate

c# - NHibernate QueryOver WhereExists 多对多

c# - Controller 方法(http get) : optional parameter is not null

c# - 将多个 bool 值绑定(bind)到单个 WinForms 复选框

C#接口(interface)类+继承VS纯抽象类

c# - C# windows metro App 上 Light 主题中的 FileSavePicker

unit-testing - Nhibernate 和 SQLite 异常 "Cannot write to a Closed TextWriter"

nhibernate - 在 Fluent NHibernate 中,如何映射组件列表?

c# - 在 NHibernate 的查询中使用 OR 子句

c# - NHibernate 使用子查询计算另一个实体?