2012-12-18 76 views
1

我正在嘗試計算有多少患者與設備相關聯的非活動患者總數。以下返回值4.它需要返回1的值,因爲有1個病人不能使用4件設備。如何獲得根記錄的唯一計數,而不是兒童記錄?

return FluentSessionManager.GetSession() 
      .CreateCriteria<Patients>() 
      .CreateAlias("Locations", "l") 
      .CreateAlias("l.Branches", "b") 
      .CreateAlias("PatientsEquipment", "pe") 
      .Add(Expression.Eq("b.ID", branchID)) 
      .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive)) 
      .Add(Expression.IsNull("pe.PickupDate")) 
      .Add(Expression.Eq("pe.PickupRequestSent", false)) 
      .Add(Expression.Eq("pe.MaintenanceRequestSent", false)) 
      .SetResultTransformer(new DistinctRootEntityResultTransformer()) 
      .SetProjection(Projections.Count("ID")).UniqueResult<int>(); 

,如果我做了以下我可以得到一個準確計數:

  ICriteria query = FluentSessionManager.GetSession() 
      .CreateCriteria<Patients>() 
      .CreateAlias("Locations", "l") 
      .CreateAlias("l.Branches", "b") 
      .CreateAlias("PatientsEquipment", "pe") 
      .Add(Expression.Eq("b.ID", branchID)) 
      .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive)) 
      .Add(Expression.IsNull("pe.PickupDate")) 
      .Add(Expression.Eq("pe.PickupRequestSent", false)) 
      .Add(Expression.Eq("pe.MaintenanceRequestSent", false)) 
      .SetResultTransformer(Transformers.DistinctRootEntity); 

     IList<Patients> patients = query.List<Patients>(); 

     if (patients == null) 
     { 
      return 0; 
     } 

     return patients.Count(); 

任何想法如何,我可以得到一個準確的患者數量,而不返回一個完整的記錄集,然後計算呢?

在此先感謝。

回答

0

我找到了答案....

return FluentSessionManager.GetSession() 
     .CreateCriteria<Patients>() 
     .CreateAlias("Locations", "l") 
     .CreateAlias("l.Branches", "b") 
     .CreateAlias("PatientsEquipment", "pe") 
     .Add(Expression.Eq("b.ID", branchID)) 
     .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive)) 
     .Add(Expression.IsNull("pe.PickupDate")) 
     .Add(Expression.Eq("pe.PickupRequestSent", false)) 
     .Add(Expression.Eq("pe.MaintenanceRequestSent", false)) 
     .SetProjection(Projections.CountDistinct("ID")).UniqueResult<int>(); 

顯然,當我使用Projections.Count它指望所有記錄,包括重複。當我將它改爲CountDistinct時,解決了我的問題。

0

您可以添加GroupProperty投影嗎?像Projections.GroupProperty(Projections.Property<Patients>(x => x.Id))

+0

我試過了。沒有骰子。它沒有任何區別。 –

相關問題