下面是QueryOver,它在NullReferenceException为null时抛出newExam.ActiveTo (ActiveTo类型是DateTime?)
Exam examAlias = null;
examsInSameTime = session.QueryOver(() => examAlias)
.Where(() => examAlias.ActiveTo == null && newExam.ActiveTo == null)
.Future<Exam>();当我重写对这个HQL的查询时,一切都很好。
var query = "from Exam exam where exam.ActiveTo is null and :newExamActiveTo is null)";
examsInSameTime = session.CreateQuery(query)
.SetParameter("newExamActiveTo", newExam.ActiveTo).List<Exam>();为什么QueryOver抛出异常而HQL不抛出异常?
发布于 2015-03-05 15:46:18
我想说,这里的解决方案应该是惊人的简单和优雅(但前提是我正确地理解了您的问题)。
重点是-检查C#中的params,不要将其发送到DB端:
Exam examAlias = null;
var query = session.QueryOver(() => examAlias);
//here we will check what needed
if(newExam.ActiveTo == null)
{
query.Where(() => examAlias.ActiveTo == null)
}
// we can repeat that many times and build WHERE clause as required
...
// finally the query
examsInSameTime = query.Future<Exam>();所以,这里的诀窍是:
发布于 2015-03-05 14:48:27
正如Radim所写的,您在QueryOver中使用了一个参数。问题是,在执行查询时,newExam可能是null。
https://stackoverflow.com/questions/28880471
复制相似问题