0
私は、次のSQLコードに似た何か実行することになりDetachedCriteriaを作成したいのですが、外に参加している設定で、OracleのNVLのようなものを使用する方法:NHibernateはDetachedCriteriaを -
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制限。
高度なDetachedCriteriaクエリに関するこのサンプルと、NHibernateマテリアルに関するアドバイスについては、何かアドバイスをありがとうと思います。
うまくいけば、これは動作します:
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();
それはおそらく、この場合のようにProjections.SQLFunctionで解決することができますhttp://stackoverflow.com/questions/793166/how-to-user-year-and-month-functions-in-nh-基準 - API – Buthrakaur