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中做到这一点?
由于 哈迪
答案 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属性中。请注意,在您保留数据之前,这不适用于瞬态对象。