2013-03-18 1 views
1

환자 기록에 장비 기록이 있거나 보관되지 않는 경우가 있습니다. 장비 기록이없는 모든 환자 기록 또는 null이 아닌 필드가있는 장비 기록이있는 모든 환자를 찾아야합니다. 아래에서 쿼리하는 방식은 작동하지 않습니다. 장비 기록이없는 환자는 전혀 찾지 않습니다. 어떤 제안? 레코드에 직접 액세스 할 수 있기 때문에 매핑이 정확합니다. 40,000 개가 넘는 레코드로 구성된 데이터베이스가 있으므로 모든 환자를 되돌릴 수없고 자식 카운트를 수행 할 수 없습니다. 그것은 느리고 너무 많은 메모리를 사용합니다.자녀가없는 부모를 찾으려면 검색어를 작성하십시오.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

public IList<Patients> GetAllPatientsWithoutDevice(int facilityID, string search) 
    { 
     ICriteria query = FluentSessionManager.GetSession() 
      .CreateCriteria<Patients>() 
      .Add(Expression.Eq("IsDeleted", false)) 
      .CreateAlias("Facilities", "f") 
      .Add(Expression.Eq("f.ID", facilityID)) 
      .CreateAlias("EquipmentHistory", "eh") // Tried, inner, left and right joins... 
      .Add(Expression.Or(
       Expression.IsNull("EquipmentHistory"), 
       Expression.IsNotNull("eh.DateOffPatient") 
      )); 

     query.AddOrder(new Order("FirstName", true)) 
      .AddOrder(new Order("LastName", true)); 

     return query.List<Patients>(); 
    } 

답변

1

나는 그것을 알아 냈습니다 ... "IsNull"대신 "IsEmpty"를 사용해야했습니다.

ICriteria query = FluentSessionManager.GetSession() 
      .CreateCriteria<Patients>() 
      .Add(Expression.Eq("IsDeleted", false)) 
      .CreateAlias("Facilities", "f") 
      .Add(Expression.Eq("f.ID", facilityID)) 
      .CreateAlias("EquipmentHistory", "eh", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
      .Add(Expression.Or(
       Expression.IsEmpty("EquipmentHistory"), 
       Expression.IsNotNull("eh.DateOffPatient") 
      )); 
관련 문제