2009-08-12 6 views
3

Auf meiner Website können Personen Teile für Fahrzeuge kaufen. Ich möchte einen Bericht für einen Kunden erstellen, um zu sehen, wie viel er für Teile pro Monat auf der Website ausgegeben hat, und ihm erlauben, nach Datum zu filtern. Wenn ich es in SQL schreibe, würde ich schreiben:Verwendung von DatePart in einer NHibernate-Kriterienabfrage

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) 

Ist diese Abfrage auch möglich, als Criteria Abfrage in NHibernate?

Antwort

4

Ja, es ist ein Weg:

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

Wo „Tag“ ist der Wert, den Sie ab dem Zeitpunkt erhalten möchten („DateTimeProperty“) und pvDay ist der Tag, Sie vergleichen es.

3

Einige Leute halten Criteria API für einen modernen Ersatz für HQL. Dies kann nicht weiter von der Wahrheit entfernt sein. Die Kriterien-API soll in Szenarien verwendet werden, in denen Abfragen dynamisch erstellt werden müssen. Warum strafen Sie sich bei statischen Anfragen? Verwenden Sie einfach gute alte HQL-API (Sie können parametrisieren), es unterstützt Gruppierung und alles, was Sie sonst noch werfen.

Verwandte Themen