public static ConditionalExpression GetNullCheckedConversion(Expression nullableValue, Expression nonNullResult)
        {
            var nullValue     = DefaultValueConstantExpressionFactory.CreateFor(nullableValue);
            var fallbackValue = DefaultValueConstantExpressionFactory.CreateFor(nonNullResult);

            var value = Expression.Condition(
                Expression.NotEqual(nullableValue, nullValue),
                nonNullResult,
                fallbackValue);

            return(value);
        }
        public static bool TryConvert(
            MethodCallExpression methodCall,
            IQueryProjectionModifier modifier,
            out Expression converted)
        {
            if (modifier.Settings.SupportsGetValueOrDefault || IsNotGetValueOrDefaultCall(methodCall))
            {
                converted = null;
                return(false);
            }

            // ReSharper disable once AssignNullToNotNullAttribute
            converted = Expression.Condition(
                methodCall.Object.GetIsNotDefaultComparison(),
                Expression.Convert(methodCall.Object, methodCall.Type),
                DefaultValueConstantExpressionFactory.CreateFor(methodCall));

            return(true);
        }
Esempio n. 3
0
            protected override MemberBinding VisitMemberBinding(MemberBinding binding)
            {
                if (binding.BindingType != MemberBindingType.Assignment)
                {
                    return(base.VisitMemberBinding(binding));
                }

                var memberBinding = (MemberAssignment)binding;

                if (memberBinding.Expression.Type.CanBeNull())
                {
                    return(base.VisitMemberBinding(binding));
                }

                var bindingValueOrNull = Expression.Condition(
                    _conditional.Test,
                    memberBinding.Expression,
                    DefaultValueConstantExpressionFactory.CreateFor(memberBinding.Expression));

                return(memberBinding.Update(bindingValueOrNull));
            }