我试图像这样实现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;发生了什么以及如何解决?
答案 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>();