Skip to content

Commit 3a1f4ae

Browse files
committed
NH-3096 - Linq add support for Nullable`1.GetValueOrDefault() without arguments
1 parent 578a89b commit 3a1f4ae

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/NHibernate.Test/Linq/ByMethod/GetValueOrDefaultTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,15 @@ public void GetValueOrDefaultInWhere()
2525

2626
Assert.AreEqual(830, orders.Count);
2727
}
28+
29+
[Test]
30+
public void GetValueOrDefaultWithSingleArgumentInWhere()
31+
{
32+
var orders = db.Orders
33+
.Where(x => x.Freight.GetValueOrDefault() > 0)
34+
.ToList();
35+
36+
Assert.AreEqual(830, orders.Count);
37+
}
2838
}
2939
}

src/NHibernate/Linq/Functions/GetValueOrDefaultGenerator.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ public IEnumerable<MethodInfo> SupportedMethods
2828

2929
public HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
3030
{
31-
return treeBuilder.Coalesce(visitor.Visit(targetObject).AsExpression(), visitor.Visit(arguments[0]).AsExpression());
31+
return treeBuilder.Coalesce(visitor.Visit(targetObject).AsExpression(), GetRhs(method, arguments, treeBuilder, visitor));
32+
}
33+
34+
private static HqlExpression GetRhs(MethodInfo method, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
35+
{
36+
if (arguments.Count > 0)
37+
return visitor.Visit(arguments[0]).AsExpression();
38+
39+
var returnType = method.ReturnType;
40+
var instance = returnType.IsValueType ? Activator.CreateInstance(returnType) : null;
41+
return treeBuilder.Constant(instance);
3242
}
3343
}
3444
}

0 commit comments

Comments
 (0)