У меня небольшая проблема с созданием объекта моего критерия. Как правило, я строю свой кафетерий так:
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));
Что мне нужно сделать, это создать критерий, который будет выглядеть примерно так:
ГДЕ ((. Конечная дата не равна NULL и
a.EndDate> = '{Now}') ИЛИ a.EndDate IS
NULL) И ((a.SubObject не равен NULL
AND a.SubObject.SubObjectId = '{Id}')
ИЛИ a.SubObject is NULL) И
a.StartDate <= '{Now}' </p>
Да, я знаю, что могу просто использовать HQL, но, если возможно, я бы хотел использовать Critera.
Подобъект и конечная дата могут быть нулевыми, и если они равны нулю, я хочу включить их в выборку, но если они не равны нулю, мне нужно сравнить их со значениями. Идентификатор подобъекта, если он не равен нулю, и текущее время, если конечная дата не равна нулю.
Я знаю, что мне нужно дизъюнкция для "ИЛИ", но я просто не уверен в их размещении и упорядочении в соответствии с критериями.