기준 개체를 구축하는 데 약간의 문제가 있습니다. 일반적으로,이 유사하게 내 cruteria 빌드 :Nhiberate 기준 표현식 "ands"및 "ors"합치기
ISession session = GetSession();
ICriteria criteria = session.CreateCriteria(typeof(MyObject))
.Add(Expression.Gt("StartDate", DateTime.Now.ToUniversalTime()))
.Add(Expression.Eq("SubObject.SubObjectId", subObjectId))
.AddOrder(new Order("StartDate", true));
을 내가해야 할 것은 더 다음과 같습니다 기준을 만드는 것입니다 :
((a.EndDate이 NULL AND 해당 없음입니다 .EndDate> = '{Now}') 또는 a.EndDate IS NULL) 및 (a.SubObject가 NULL이 아님 AND a.SubObject.SubObjectId = '{Id}') 또는 a.SubObject가 NULL 임) AND a.StartDate < = '{Now}'
예, HQL을 사용할 수는 있지만 가능한 경우 Critera를 대신 사용하고 싶습니다.
subobject와 enddate는 null 일 수 있으며 null 인 경우 선택에 포함 시키지만 null이 아닌 경우 값과 비교해야합니다. 하위 객체가 null이 아니고 하위 객체의 id가 enddate가 null이 아닌 경우 현재 시간입니다.
나는 "OR"에 대한 분리가 필요하다는 것을 알고 있지만 기준이되는 한 배치 및 정렬에 대해서는 확신 할 수 없습니다.