如何在NHibernate的Criteria查询中使用DatePart函数

4

在我的网站上,人们可以购买车辆零部件。我想为客户创建一份报告,让他们查看他们每月在该网站上花费了多少钱购买零部件,并允许他们按日期筛选。如果我要用SQL编写它,我会写成这样:

SELECT
    v.id,
    DATEPART(YEAR, o.order_date), 
    DATEPART(MONTH, o.order_date),
    SUM(i.unit_price * i.quantity)
FROM vehicles v
    join order_items i on v.id = i.truck_id
    join orders o on o.order_id = i.order_id
WHERE v.customer_id = @CustomerId
    AND o.order_date > @StartDate
    AND o.order_date < @EndDate
GROUP BY DATEPART(YEAR, o.order_date), DATEPART(MONTH, o.order_date)

这个查询在NHibernate中是否可以作为Criteria查询呢?
2个回答

4

是的,有一种方法:

CurrentSession.CreateCriteria(typeof(Object)).Add(Expression.Eq(Projections.SqlFunction("day", NHibernateUtil.DateTime, Projections.Property("DateTimeProperty")), pvDay))

其中,“day”是您想从日期(“DateTimeProperty”)中获取的值,而“pvDay”是您要将其与之比较的日期。


3

有些人认为 Criteria API 是 HQL 的现代替代品。事实并非如此。Criteria API 旨在用于动态构建查询的场景。对于静态查询,何必自讨苦吃呢?只需使用老牌的 HQL API(您可以将其参数化),它支持分组和其他任何您需要的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接