private static bool TryMatchCoalescePattern(Expression expression, out Expression normalized)
        {
            normalized = (Expression)null;
            bool flag = false;

            if (expression.NodeType == ExpressionType.Quote)
            {
                if (LinqExpressionNormalizer.TryMatchCoalescePattern(((UnaryExpression)expression).Operand, out normalized))
                {
                    flag       = true;
                    normalized = (Expression)Expression.Quote(normalized);
                }
            }
            else if (expression.NodeType == ExpressionType.Lambda)
            {
                LambdaExpression lambdaExpression = (LambdaExpression)expression;
                if (lambdaExpression.Body.NodeType == ExpressionType.Coalesce && lambdaExpression.Body.Type == typeof(bool))
                {
                    BinaryExpression body = (BinaryExpression)lambdaExpression.Body;
                    if (body.Right.NodeType == ExpressionType.Constant && false.Equals(((ConstantExpression)body.Right).Value))
                    {
                        normalized = (Expression)Expression.Lambda(lambdaExpression.Type, (Expression)Expression.Convert(body.Left, typeof(bool)), (IEnumerable <ParameterExpression>)lambdaExpression.Parameters);
                        flag       = true;
                    }
                }
            }
            return(flag);
        }
        private static MethodCallExpression NormalizePredicateArgument(
            MethodCallExpression callExpression)
        {
            int                  argumentOrdinal;
            Expression           normalized;
            MethodCallExpression methodCallExpression;

            if (LinqExpressionNormalizer.HasPredicateArgument(callExpression, out argumentOrdinal) && LinqExpressionNormalizer.TryMatchCoalescePattern(callExpression.Arguments[argumentOrdinal], out normalized))
            {
                methodCallExpression = Expression.Call(callExpression.Object, callExpression.Method, (IEnumerable <Expression>) new List <Expression>((IEnumerable <Expression>)callExpression.Arguments)
                {
                    [argumentOrdinal] = normalized
                });
            }
            else
            {
                methodCallExpression = callExpression;
            }
            return(methodCallExpression);
        }