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); }
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)); }