2009-08-12 6 views
3

내 사이트에서 사람들은 차량용 부품을 구입할 수 있습니다. 고객이 사이트에서 월간 부품 사용량을보고 날짜별로 필터링 할 수 있도록 보고서를 만들고 싶습니다. 내가 SQL에서 그것을 쓰는 경우, 나는이를 작성합니다NHibernate 기준 쿼리에서 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

예 방법이있다.

3

어떤 사람들은 Criteria API를 HQL의 현대적인 대체품으로 생각합니다. 이것은 진실에서 더 이상있을 수 없습니다. 조건 API는 쿼리를 동적으로 작성해야하는 시나리오에서 사용하기위한 것입니다. 정적 쿼리의 경우 왜 처벌해야합니까? 그냥 좋은 오래된 HQL API (당신 수 있습니다 매개 변수를 매개 변수화), 그것은 그룹화 및 당신이 그것에 던져 아무것도 지원합니다.

"날"당신이 날짜 ("DateTimeProperty")와 pvDay에서 좀하고 싶습니다 값이
CurrentSession.CreateCriteria(typeof(Object)).Add(Expression.Eq(Projections.SqlFunction("day", NHibernateUtil.DateTime, Projections.Property("DateTimeProperty")), pvDay)) 

당신이에 비교하고있는 일이 :