From 9a56886f1d7814772d4d38cfbe062bf396cd3cd1 Mon Sep 17 00:00:00 2001 From: "agrath@gmail.com" Date: Fri, 25 Mar 2011 09:34:39 -1300 Subject: [PATCH] Made !, != true more robust when property may not exist on a node Fixed some cases of && breaking where the wrong number of parameters was passed to the LambdaExpression --- .../RazorDynamicNode/DynamicQueryable.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicQueryable.cs b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicQueryable.cs index 0a89ab0e1a..2c9ea55590 100644 --- a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicQueryable.cs +++ b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicQueryable.cs @@ -1097,7 +1097,14 @@ namespace System.Linq.Dynamic { ParameterExpression[] parameters = new ParameterExpression[(expr as LambdaExpression).Parameters.Count]; (expr as LambdaExpression).Parameters.CopyTo(parameters, 0); - expr = Expression.Lambda>(Expression.Not(Expression.Invoke(expr, parameters)), parameters); + var invokedExpr = Expression.Invoke(expr, parameters); + var not = Expression.Not(Expression.TypeAs(invokedExpr, typeof(Nullable))); + expr = Expression.Lambda>( + Expression.Condition( + Expression.Property(not, "HasValue"), + Expression.Property(not, "Value"), + Expression.Constant(false, typeof(bool)) + ), parameters); } else { @@ -2416,7 +2423,7 @@ namespace System.Linq.Dynamic } else { - return (Expression.Lambda>(Expression.AndAlso(finalLeft, finalRight), parameters)); + return (Expression.Lambda>(Expression.AndAlso(finalLeft, finalRight), parameters)); } case ExpressionType.OrElse: if (leftIsLambda && rightIsLambda && sequenceEqual)