Пример #1
0
        public void NoTransformationTest()
        {
            Expression <Func <int, int> > source = (p) => p - 2;

            var actual = new TransformExpressionVisitor().VisitAndConvert(source, "");

            Assert.IsNotNull(actual);
            Assert.AreEqual("p => (p - 2)", actual.ToString());
        }
Пример #2
0
        public void TransformToDecrementTest()
        {
            Expression <Func <int, int> > source = (p) => p - 1;

            var actual = new TransformExpressionVisitor().VisitAndConvert(source, "");

            Assert.IsNotNull(actual);
            Assert.AreEqual("p => Decrement(p)", actual.ToString());
        }
Пример #3
0
        public void ParameterIsExistExpression()
        {
            Expression <Func <int, int, int, int> > source = (a, b, c) => a + b + c;

            var actual = new TransformExpressionVisitor().Transformation(source, new Dictionary <string, object>
            {
                { "a", 21 },
                //{ "b", 23 },
                { "c", 4 }
            });

            Console.WriteLine(actual);
        }
        public S Execute <S>(Expression expression)
        {
            TransformMappingsMergerExpressionVisitor mergerVisitor = new TransformMappingsMergerExpressionVisitor();

            mergerVisitor.Visit(expression);


            TransformSelectInserterExpressionVisitor selectInserterVisitor = new TransformSelectInserterExpressionVisitor(mergerVisitor.TypeMappings);

            expression = selectInserterVisitor.Visit(expression);


            TransformExpressionVisitor visitor = new TransformExpressionVisitor(
                _source,
                mergerVisitor.TypeMappings,
                mergerVisitor.PropertyMappings,
                mergerVisitor.SelectParameterMappings,
                mergerVisitor.ContainerClassMappings);

            Expression newExpression = visitor.Visit(expression);

            return((S)_source.Provider.Execute(newExpression));
        }
        public IEnumerator <T> GetEnumerator()
        {
            TransformMappingsMergerExpressionVisitor mergerVisitor = new TransformMappingsMergerExpressionVisitor();

            mergerVisitor.Visit(_currentExpression);


            TransformSelectInserterExpressionVisitor selectInserterVisitor = new TransformSelectInserterExpressionVisitor(mergerVisitor.TypeMappings);
            Expression newExpression = selectInserterVisitor.Visit(_currentExpression);


            TransformExpressionVisitor visitor = new TransformExpressionVisitor(
                _source,
                mergerVisitor.TypeMappings,
                mergerVisitor.PropertyMappings,
                mergerVisitor.SelectParameterMappings,
                mergerVisitor.ContainerClassMappings);

            newExpression = visitor.Visit(newExpression);

            IQueryable <T> queryable = (IQueryable <T>)_source.Provider.CreateQuery(newExpression);

            return(queryable.GetEnumerator());
        }