Я хотел бы создать DetachedCriteria, который будет выполнять что-то похожее на следующий код SQL:
select *
FROM PRICELIST pl
LEFT OUTER JOIN PRICELISTDURATIONSHIFT sh ON sh.PRICELISTID = pl.ID
WHERE sh.CUSTOMERID = :cust
AND nvl(sh.DATEFROM, pl.DATEFROM) <= :dt
ORDER BY nvl(sh.DATEFROM, pl.DATEFROM) DESC
Я могу присоединиться к классу / таблице PriceListDurationShift
влево-наружу и добавить ограничение Customer, но я не могу понять, как добавить что-то вроде nvl (sh.DATEFROM, pl.DATEFROM ) <=: ограничение dt. </p>
Буду признателен за любые советы для этого образца, а также за советы по материалам NHibernate по расширенным запросам DetachedCriteria.
надеюсь, это сработает:
var priceLists = priceListRepo.FindAll(DetachedCriteria.For<PriceList>("pl")
.CreateCriteria((PriceList x) => x.PriceListDurationShifts, () => shift,
JoinType.LeftOuterJoin)
.Add<PriceListDurationShift>(x => x.Customer == cust)
.Add(Expression.Or(
Expression.And(Restrictions.IsNull("shift.DateFrom"),
Restrictions.Le("pl.DateFrom", dt.DateTo)),
Expression.And(Restrictions.IsNotNull("shift.DateFrom"),
Restrictions.Le("shift.DateFrom", dt.DateTo))
))
)
.ToList();