【发布时间】:2009-11-10 19:46:03
【问题描述】:
我在构建标准对象时遇到了一点麻烦。通常,我构建我的 cruteria 与此类似:
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));
我需要做的是创建一个看起来更像这样的标准:
WHERE ((a.EndDate 不为空并且 a.EndDate >= '{Now}') 或 a.EndDate IS NULL) AND ((a.SubObject IS NOT NULL 和 a.SubObject.SubObjectId = '{Id}') 或 a.SubObject 为空)和 a.StartDate
是的,我知道我可以只使用 HQL,但如果可能的话,我想改用 Critera。
子对象和结束日期可以为空,如果它们为空,我想将它们包含在选择中,但如果它们不为空,我需要将它们与值进行比较。如果子对象不为空,则为子对象的 id,如果 enddate 不为空,则为当前时间。
我知道我需要对“OR”进行析取,但就标准而言,我只是不确定它们的位置和顺序。
【问题讨论】:
标签: c# nhibernate criteria expression