public bool TryCreate(Expression leftOperand, Expression rightOperand, out IMapExpressionBuilder builder)
        {
            builder = null;
            var conditionalNode = rightOperand as ConditionalExpression;

            if (conditionalNode == null)
            {
                return(false);
            }

            var ifTrueIsIgnore  = ignoreNodeChecker.IsIgnoreNode(conditionalNode.IfTrue);
            var ifFalseIsIgnore = ignoreNodeChecker.IsIgnoreNode(conditionalNode.IfFalse);

            if (!ifTrueIsIgnore && !ifFalseIsIgnore)
            {
                return(false);
            }
            if (ifTrueIsIgnore && ifFalseIsIgnore)
            {
                builder = new EmptyMapExpressionBuilder();
                return(true);
            }
            if (ifFalseIsIgnore)
            {
                builder = new ConditionalAssignMapExpressionBuilder(conditionalNode.Test, leftOperand, conditionalNode.IfTrue);
                return(true);
            }
            builder = new ConditionalAssignMapExpressionBuilder(Expression.IsFalse(conditionalNode.Test), leftOperand, conditionalNode.IfFalse);
            return(true);
        }
Beispiel #2
0
 public bool TryCreate(Expression leftOperand, Expression rightOperand, out IMapExpressionBuilder builder)
 {
     if (ignoreNodeChecker.IsIgnoreNode(rightOperand))
     {
         builder = new EmptyMapExpressionBuilder();
         return(true);
     }
     builder = null;
     return(false);
 }
Beispiel #3
0
        protected override Expression VisitBinary(BinaryExpression node)
        {
            if (node.NodeType != ExpressionType.Assign)
            {
                return(base.VisitBinary(node));
            }
            IMapExpressionBuilder expressionBuilder = null;

            if (!specificExpressionBuilderFactories.Any(f => f.TryCreate(node.Left, node.Right, out expressionBuilder)))
            {
                return(base.VisitBinary(node));
            }

            return(expressionBuilder.GetExpression());
        }