Exemplo n.º 1
0
        /// <summary>
        /// 根据类型<see cref="DbJoinKeyPairExpression"/>表达式创建表达式语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">所在数据源。</param>
        /// <param name="source">检索表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual IExpressionFragment CreateExpressionForJoinKeyPair(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var content = (DbJoinKeyPairExpression)expression;

            return(new BinaryFragment(context, EBinaryKind.Equal)
            {
                Left = source.CreateExpression(content.Left),
                Right = source.CreateExpression(content.Right),
            });
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        protected override IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var binary = (DbBinaryExpression)expression;

            if (binary.Kind == EBinaryKind.Add && binary.ClrType == typeof(string))
            {
                return(new StringConcatFragment(context,
                                                source.CreateExpression(binary.Left),
                                                source.CreateExpression(binary.Right)));
            }
            return(base.CreateExpressionForBinary(context, expression, source));
        }
Exemplo n.º 3
0
        /// <inheritdoc/>
        protected override IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var binary = (DbBinaryExpression)expression;

            if (binary.Kind == EBinaryKind.Add && binary.ClrType == typeof(string))
            {
                var scalar = new ScalarFragment(context,
                                                source.CreateExpression(binary.Left),
                                                source.CreateExpression(binary.Right));
                scalar.Function = SupportMembers.String.Concat;
                return(scalar);
            }
            return(base.CreateExpressionForBinary(context, expression, source));
        }
Exemplo n.º 4
0
        /// <summary>
        /// 根据类型<see cref="DbBinaryExpression"/>表达式创建表达式语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">所在数据源。</param>
        /// <param name="source">检索表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var binary = (DbBinaryExpression)expression;

            if (binary.Kind == EBinaryKind.AndAlso || binary.Kind == EBinaryKind.OrElse)
            {
                return(source.CreateExpression(binary.Left).Merge(binary.Kind, source.CreateExpression(binary.Right)));
            }
            else
            {
                return(new BinaryFragment(context, binary.Kind)
                {
                    Left = source.CreateExpression(binary.Left),
                    Right = source.CreateExpression(binary.Right)
                });
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 根据类型<see cref="DbUnaryExpression"/>表达式创建表达式语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">所在数据源。</param>
        /// <param name="source">检索表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual IExpressionFragment CreateExpressionForUnary(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var unary = (DbUnaryExpression)expression;

            return(new UnaryFragment(context, unary.Kind, unary.Type)
            {
                Expresssion = source.CreateExpression(unary.Expression)
            });
        }
Exemplo n.º 6
0
        /// <summary>
        /// 根据类型<see cref="DbScalarFunctionExpression"/>表达式创建表达式语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">所在数据源。</param>
        /// <param name="source">检索表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual IExpressionFragment CreateExpressionForScalarFunction(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var scalar = (DbScalarFunctionExpression)expression;
            var result = new ScalarFragment(context)
            {
                Function = scalar.Function
            };

            foreach (var arg in scalar.Arguments)
            {
                result.Arguments.Add(source.CreateExpression(arg));
            }
            return(result);
        }