Nhibernate sum / groupby问题

时间:2011-02-26 20:35:53

标签: nhibernate

CREATE TABLE [dbo].[OrderHistory](
    [RecordID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NOT NULL, /* FK to user table*/
    [ItemID] [int] NOT NULL, /* FK to Item table */
    [PurchaseDate] [datetime] NOT NULL,
    [UnitPrice] [money] NOT NULL,
    [Quantity] [float] NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [RecordID] ASC
) ON [PRIMARY]

我有一张表来保存用户的订单历史记录。我需要计算用户每年花费的总金额。如果我直接编写SQL查询,它非常简单明了:

select SUM(UnitPrice * Quantity) as TotalAmount, DATEPART(yyyy, PurchaseDate)
from OrderHistory
where UserId = 1
group by DATEPART(yyyy, PurchaseDate)

计划对象模型是:

public class YearlySummary {
        public virtual int Year {
            get;
            set;
        }

        public virtual decimal TotalSpent {
            get;
            set;
        }
    }

但我怎么能在Nhibernate中做到这一点?

由于 哈迪

2 个答案:

答案 0 :(得分:0)

您可以使用Linq执行此操作。

你应该做如下的事情:

从Session.Linq.Where(x => x.UserId = 1)中的orderHistory by orderHistory.PurchaseDate into g select new {TotalAmount = g.Sum(orderHistory.UnitPrice * orderHistory.Quantity)}

答案 1 :(得分:0)

如果您只需要获取(历史性)数据,那么实际上很容易。在映射文件中使用公式:

<property name="TotalSpent" formula="UnitPrice * Quantity" type="Decimal" />

这将乘以查询中的两个值(例如,从OrderHistory中选择UnitPrice * Quantity)并将结果放在TotalSpent属性中。请注意,在您保留数据之前,这不适用于瞬态对象。