Ejemplo n.º 1
0
        private Expression CreateExpressionFromSelectionPack(SelectConditionPack selectConditionPack,
                                                             ParameterExpression parameter)
        {
            var _expressionBuilder =
                _logicConditionStrategy.GetExpressionBuilder(selectConditionPack.JoinCondition);
            Expression _finalExpression = _expressionBuilder.Start();

            foreach (SelectConditionPack _selectConditionPack in selectConditionPack.SelectConditionPacks)
            {
                var _expression = CreateExpressionFromSelectionPack(_selectConditionPack, parameter);
                _finalExpression = _expressionBuilder.Build(_finalExpression, _expression);
            }

            foreach (SelectCondition _selectCondition in selectConditionPack.SelectConditions)
            {
                var _expression = CreateExpressionFromCondition(parameter, _selectCondition);
                _finalExpression = _expressionBuilder.Build(_finalExpression, _expression);
            }

            if (selectConditionPack.Not)
            {
                _finalExpression = Expression.Not(_finalExpression);
            }

            return(_finalExpression);
        }
Ejemplo n.º 2
0
        private IQueryable <TModel> Apply <TModel>(IQueryable <TModel> queryableData,
                                                   SelectConditionPack selectConditionPack)
        {
            var _parameter  = Expression.Parameter(typeof(TModel), "x");
            var _expression = CreateExpressionFromSelectionPack(selectConditionPack, _parameter);

            return(SelectQueryByExpression(queryableData, _expression, _parameter));
        }
Ejemplo n.º 3
0
        public void SelectManyWithSubConditions()
        {
            // Array
            using var _context = new DBContext(_dbInit.DbContextOptions);
            ISelector _selector       = new Select.Selector(_serviceProvider);
            var       _filterByString = new SelectConditionPack
            {
                SelectConditions =
                {
                    new SelectCondition {
                        Condition = CompareCondition.Eq, Value = "2", PropertyName = nameof(DataModel.StringValue)
                    },
                    new SelectCondition {
                        Condition = CompareCondition.Eq, Value = "3", PropertyName = nameof(DataModel.StringValue)
                    }
                },
                JoinCondition = LogicCondition.Or
            };
            var _filterById = new SelectConditionPack
            {
                SelectConditions =
                {
                    new SelectCondition {
                        Condition = CompareCondition.Eq, Value = "2", PropertyName = nameof(DataModel.Id)
                    },
                    new SelectCondition {
                        Condition = CompareCondition.Eq, Value = "3", PropertyName = nameof(DataModel.Id)
                    }
                },
                JoinCondition = LogicCondition.Or
            };
            var _selectRequest = new TestSelectRequestStruct
            {
                Where = new SelectConditionPack
                {
                    SelectConditions =
                    {
                        new SelectCondition
                        {
                            Condition = CompareCondition.Ge, Value = "2", PropertyName = nameof(DataModel.DoubleValue)
                        },
                        new SelectCondition
                        {
                            Condition = CompareCondition.Lt, Value = "3.6", PropertyName = nameof(DataModel.FloatValue)
                        }
                    },
                    SelectConditionPacks = { _filterByString, _filterById },
                    JoinCondition        = LogicCondition.And
                }
            };
            var _expectedResult = _context.Table.Where(t => t.Id == 2 || t.Id == 3).ToArray();

            // Act
            var _assertedResult = _selector.Apply(_context.Table.AsQueryable(), _selectRequest).ToArray();

            // Assert
            Assert.IsTrue(DataModel.CompareArr(_expectedResult, _assertedResult));
        }