Esempio n. 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));
        }
Esempio n. 2
0
        private LinqQueryExpression <TEntity> IsLikeCall <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.Like(
                           expression.QueryExpression,
                           value.QueryExpression
                           ),
                       expression.JoinBuilders
                       ));
        }
Esempio n. 3
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
                           )));
        }
Esempio n. 4
0
        private LinqQueryExpression <TEntity> CountCall <TEntity>(MethodCallExpression methodCallExpression,
                                                                  ExpressionConversionVisitor <TEntity> expressionConverter)
            where TEntity : class
        {
            if (methodCallExpression.Arguments.Count < 2)
            {
                return(new LinqQueryExpression <TEntity>(
                           QueryExpression.Count()
                           ));
            }

            var expression = expressionConverter.Visit(methodCallExpression.Arguments[1]) as LinqQueryExpression <TEntity>;

            return(new LinqQueryExpression <TEntity>(
                       QueryExpression.Count(expression.QueryExpression),
                       expression.JoinBuilders
                       ));
        }