private Expression GetReadOnlyMemberPopulation()
        {
            var targetMemberAccess  = MapperData.GetTargetMemberAccess();
            var targetMemberNotNull = targetMemberAccess.GetIsNotDefaultComparison();

            return(Expression.IfThen(targetMemberNotNull, _dataSources.BuildValue()));
        }
示例#2
0
            public Expression GetFinalValueOrNull()
            {
                var finalDataSource = _dataSources.Last();
                var finalValue      = finalDataSource.Value;

                if (!finalDataSource.IsFallback)
                {
                    return(finalValue);
                }

                if (finalValue.NodeType == ExpressionType.Coalesce)
                {
                    // Coalesce between the existing target member value and the fallback:
                    return(((BinaryExpression)finalValue).Right);
                }

                var targetMemberAccess = MapperData.GetTargetMemberAccess();

                if (ExpressionEvaluation.AreEqual(finalValue, targetMemberAccess))
                {
                    return(null);
                }

                return(finalValue);
            }
示例#3
0
        private Expression GetFallbackValueOrNull()
        {
            var finalDataSource = _dataSources.Last();
            var fallbackValue   = finalDataSource.Value;

            if (finalDataSource.IsConditional || _dataSources.HasOne())
            {
                return(fallbackValue);
            }

            if (fallbackValue.NodeType == ExpressionType.Coalesce)
            {
                return(((BinaryExpression)fallbackValue).Right);
            }

            var targetMemberAccess = MapperData.GetTargetMemberAccess();

            if (ExpressionEvaluation.AreEqual(fallbackValue, targetMemberAccess))
            {
                return(null);
            }

            return(fallbackValue);
        }