Exemple #1
0
        private LinqQueryExpression <TEntity> IsInCall <TEntity>(MethodCallExpression methodCallExpression,
                                                                 ExpressionConversionVisitor <TEntity> expressionConverter)
            where TEntity : class
        {
            var expression = expressionConverter.Visit(methodCallExpression.Arguments[1]) as LinqQueryExpression <TEntity>;
            var value      = expressionConverter.Visit(methodCallExpression.Arguments[2]) as LinqQueryExpression <TEntity>;

            if (value.QueryExpression is ValueParameterQueryExpression valueQueryExpression &&
                valueQueryExpression.Value is IEnumerable valueEnumerable)
            {
                var valueExpressions = new List <QueryExpression>();
                foreach (var o in valueEnumerable)
                {
                    valueExpressions.Add(ORMQueryExpressions.Value(o));
                }

                return(new LinqQueryExpression <TEntity>(
                           QueryExpression.IsIn(
                               expression.QueryExpression,
                               valueExpressions.ToArray()
                               ),
                           expression.JoinBuilders));
            }

            return(new LinqQueryExpression <TEntity>(
                       QueryExpression.IsIn(
                           expression.QueryExpression,
                           value.QueryExpression
                           ),
                       expression.JoinBuilders));
        }
Exemple #2
0
        public bool TryConvertMethod <TEntity>(MethodCallExpression methodCallExpression,
                                               ExpressionConversionVisitor <TEntity> expressionConverter,
                                               out LinqQueryExpression <TEntity> convertedExpression)
            where TEntity : class
        {
            if (methodCallExpression.Method.IsGenericMethod)
            {
                var openGenericMethod = methodCallExpression.Method.GetGenericMethodDefinition();
                if (_hasFlagMethod == openGenericMethod)
                {
                    convertedExpression = HasFlagCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
                else if (_isInMethods.Contains(openGenericMethod))
                {
                    convertedExpression = IsInCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
            }
            else
            {
                if (methodCallExpression.Method == _lastInsertIdMethod)
                {
                    convertedExpression = LastInsertIdCall <TEntity>();
                    return(true);
                }
                else if (methodCallExpression.Method == _randomMethod)
                {
                    convertedExpression = RandomCall <TEntity>();
                    return(true);
                }
                if (methodCallExpression.Method == _isLikeMethod)
                {
                    convertedExpression = IsLikeCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
                else if (_minMethods.Contains(methodCallExpression.Method))
                {
                    convertedExpression = MinCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
                else if (_maxMethods.Contains(methodCallExpression.Method))
                {
                    convertedExpression = MaxCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
                else if (_countMethods.Contains(methodCallExpression.Method))
                {
                    convertedExpression = CountCall <TEntity>(methodCallExpression, expressionConverter);
                    return(true);
                }
            }

            convertedExpression = default;
            return(false);
        }
Exemple #3
0
        private LinqQueryExpression <TEntity> MaxCall <TEntity>(MethodCallExpression methodCallExpression,
                                                                ExpressionConversionVisitor <TEntity> expressionConverter)
            where TEntity : class
        {
            var expression = expressionConverter.Visit(methodCallExpression.Arguments[1]) as LinqQueryExpression <TEntity>;

            return(new LinqQueryExpression <TEntity>(
                       QueryExpression.Max(expression.QueryExpression),
                       expression.JoinBuilders
                       ));
        }
            private LinqQueryExpression <Flat_Entity> Convert(ExpressionConversionVisitor <Flat_Entity> converter, Expression <Func <Flat_Entity, bool> > expr)
            {
                var conditionConverter = new ConditionConverter <Flat_Entity>(
                    converter.DataModel,
                    converter.TableIdentifier
                    );
                var converted = conditionConverter.ConvertClause(expr);

                return(new LinqQueryExpression <Flat_Entity>(
                           converted.QueryExpression, converted.Joins
                           ));
            }
Exemple #5
0
        private LinqQueryExpression <TEntity> HasFlagCall <TEntity>(MethodCallExpression methodCallExpression,
                                                                    ExpressionConversionVisitor <TEntity> expressionConverter)
            where TEntity : class
        {
            var expression = expressionConverter.Visit(methodCallExpression.Arguments[1]) as LinqQueryExpression <TEntity>;
            var value      = expressionConverter.Visit(methodCallExpression.Arguments[2]) as LinqQueryExpression <TEntity>;

            return(new LinqQueryExpression <TEntity>(
                       QueryExpression.AreEqual(
                           QueryExpression.And(expression.QueryExpression, value.QueryExpression),
                           value.QueryExpression
                           ),
                       (expression.JoinBuilders ?? JoinBuilder <TEntity> .Empty).Concat(
                           value.JoinBuilders ?? JoinBuilder <TEntity> .Empty
                           )));
        }
            public bool TryConvertMethod <TEntity>(MethodCallExpression methodCallExpression, ExpressionConversionVisitor <TEntity> expressionConverter, out LinqQueryExpression <TEntity> convertedExpression) where TEntity : class
            {
                if (methodCallExpression.Method.Name != nameof(SqlServerFunctionsExtensions.ValueIsGreaterThanOne))
                {
                    convertedExpression = default;
                    return(false);
                }

                var typedConverter = expressionConverter as ExpressionConversionVisitor <Flat_Entity>;

                convertedExpression = Convert(typedConverter, q => q.Value > 1) as LinqQueryExpression <TEntity>;
                return(true);
            }