2009-08-12 6 views
3

私のサイトでは、人々は車の部品を購入することができます。私は、顧客が月に部品に費やした金額をサイトで確認し、日付別にフィルタリングできるようにするためのレポートを作成したいと考えています。私はSQLでそれを書いていた場合、私はこれを記述します。NHibernate CriteriaクエリでDatePartを使用する方法

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の中に基準クエリとしても、可能なこのクエリていますか?

答えて

4

はい方法がある:

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

「日」は日付(「DateTimeProperty」)から取得したいのですが値であるとpvDayは、あなたがそれを比較している日が入ります。

3

HQLの現代的な代替品としてCriteria APIを考えている人もいます。これは真実から遠いものではありません。 Criteria APIは、クエリを動的に構築する必要があるシナリオで使用することを目的としています。静的クエリの場合、なぜ自分自身を罰するのでしょうか?ちょうどいい古いHQL API(にパラメータ化することができます)を使用して、それはあなたがそれに投げるグループ化と何かをサポートします。

関連する問題