2012-05-11 161 views
-2

我試圖爲follwing查詢創建Nhibernate標準,但沒有得到正確的想法。 PLZ指南給定查詢的Nhibernate標準?

SELECT PEH.ResponseStatus FROM PatientEligibilityHistory PEH WHERE PEH.PatientId = " + patientId + " AND PEH.PayorId = " + payorId + " AND PEH.DateOfService = '" + dateOfService + "' AND PEH.Insured_Id = '" + insuredId + "' HAVING PEH.ResponseDateTime = MAX(PEH.ResponseDateTime) 

我無法理解如何使用max創建子句的條件。

+0

的ICriteria標準= session.CreateCriteria(typeof運算(PatientEligibilityHistory)); (Expression.And(Expression.In(「PatientId」,patientList),Expression.In(「PatientCaseId」,patientCaseList))); (Expression.And(ExpressionIn(「PayorId」,payorList),Expression.In(「InsuredId」,insuredList))); criteria.SetProjection(Projections.RowCount()); 但現在我不得不添加具有條款作爲查詢中提到,我沒有做。 – touseefkhan4pk

回答

1

你需要一個相關子查詢

DetachedCriteria query = DetachedCriteria.For<PatientEligibilityHistory>() 
    .Add(Expression.In("PatientId", patientList)) 
    .Add(Expression.In("PatientCaseId", patientCaseList)) 
    .Add(Expression.In("PayorId", payorList)) 
    .Add(Expression.In("InsuredId", insuredList)); 

DetachedCriteria subquery = CriteriaTransformer.Clone(query).SetProjection(Projections.Max("ResponseDateTime")); 

ICriteria criteria = query.GetExecutableCriteria(session) 
    .Add(Subquery.Eq("ResponseDateTime", subquery)); 
    .SetProjection(Projections.Max("ResponseStatus"));