Closed
Description
Using Nullable<T>.HasValue
in LINQ throws NHibernate.HibernateException: Evaluation failure on null.HasValue
if no value is set.
Test case
[Test]
public void CanUseNullableWithoutAValue()
{
bool? isActive = null;
Assert.DoesNotThrow(
() => _ = session.Query<Role>()
.Where(r => !isActive.HasValue || r.IsActive == isActive.Value)
.ToList());
}
Error details
NHibernate.HibernateException: Evaluation failure on null.HasValue ---> System.Reflection.TargetException: Non-static method requires a target.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at NHibernate.Impl.ExpressionProcessor.FindValue(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Impl\ExpressionProcessor.cs:line 269
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.EvaluateSubtree(Expression subtree) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 151
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 92
--- End of inner exception stack trace ---
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 99
at System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression node)
at System.Linq.Expressions.UnaryExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 87
at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node)
at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 87
at System.Linq.Expressions.ExpressionVisitor.VisitLambda[T](Expression`1 node)
at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 87
at System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression node)
at System.Linq.Expressions.UnaryExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 87
at System.Linq.Expressions.ExpressionVisitor.VisitArguments(IArgumentProvider nodes)
at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node)
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.Visit(Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 87
at NHibernate.Linq.Visitors.NhPartialEvaluatingExpressionVisitor.EvaluateIndependentSubtrees(Expression expressionTree, PreTransformationParameters preTransformationParameters) in C:\src\nhibernate-core\src\NHibernate\Linq\Visitors\NhPartialEvaluatingExpressionVisitor.cs:line 60
at NHibernate.Linq.NhRelinqQueryParser.PreTransform(Expression expression, PreTransformationParameters parameters) in C:\src\nhibernate-core\src\NHibernate\Linq\NhRelinqQueryParser.cs:line 70
at NHibernate.Linq.NhLinqExpression..ctor(QueryMode queryMode, Expression expression, ISessionFactoryImplementor sessionFactory) in C:\src\nhibernate-core\src\NHibernate\Linq\NhLinqExpression.cs:line 50
at NHibernate.Linq.NhLinqExpression..ctor(Expression expression, ISessionFactoryImplementor sessionFactory) in C:\src\nhibernate-core\src\NHibernate\Linq\NhLinqExpression.cs:line 43
at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query) in C:\src\nhibernate-core\src\NHibernate\Linq\DefaultQueryProvider.cs:line 204
at NHibernate.Linq.DefaultQueryProvider.ExecuteList[TResult](Expression expression) in C:\src\nhibernate-core\src\NHibernate\Linq\DefaultQueryProvider.cs:line 107
at NHibernate.Linq.NhQueryable`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() in C:\src\nhibernate-core\src\NHibernate\Linq\NhQueryable.cs:line 65
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NHibernate.Test.Linq.WhereTests.<>c__DisplayClass59_0.<CanUseNullableWithoutAValue>b__0() in C:\src\nhibernate-core\src\NHibernate.Test\Linq\WhereTests.cs:line 760