NHibernate中的DetachedCriteria与外部变量的OR

时间:2018-04-20 20:50:44

标签: nhibernate fluent-nhibernate

我试图像这样实现SQL:

DECLARE @subtype varchar()
SET subtype=null

SELECT E.* FROM ErrorCRM 
WHERE TypeError='A'
AND (SubtypeError=B or @subtype is null)

我的DetachedCriteria是这样的:

DetachedCriteria query = DetachedCriteria.For<ErrorCRM>("e")
.Add(Restrictions.Eq("TipoError", TipoError))
.Add(Restrictions.Disjunction()
.Add(Expression.Eq(SubTipoError,null))
.Add(Expression.Eq("SubTipoError", SubTipoError))
)
.Add(Restrictions.Eq("Sentido", Sentido))
.Add(Restrictions.Where<ErrorBase>(e => e.Hs >= HsDesde && e.Hs < HsHasta))
.AddOrder(Order.Desc("Hs"));

var errores = query.GetExecutableCriteria(session).List<ErrorCRM>();

但由于某种原因,我得到了这个错误:&#34;对象引用未设置为对象的实例。&#34;发生了什么以及如何解决?

1 个答案:

答案 0 :(得分:0)

如果我需要为每个标准构建不同的分离标准,我找到了解决方法。我添加它以防有人可以有用。另一种方法是逐行构建查询

             DetachedCriteria query = null;

            query = DetachedCriteria.For<ErrorCRM>("e");
            query= query.Add(Restrictions.Eq("TipoError", TipoError));
            if (SubTipoError != null) {
                query = query.Add(Restrictions.Eq("SubTipoError", SubTipoError));
                }
            query = query.Add(Restrictions.Eq("Sentido", Sentido));
            query = query.Add(Restrictions.Where<ErrorBase>(e => e.Hs >= HsDesde && e.Hs < HsHasta));
            query = query.AddOrder(Order.Desc("Hs"));


            var errores = query.GetExecutableCriteria(session).List<ErrorCRM>();